2017-03-03 1 views
0

Je dois passer cet objet de la vue sur le contrôleur:objet passe de la vue vers le contrôleur MVC 5

public class QuoteVehicle 
    { 
     [DisplayName("Quote Vehicle ID")] 
     public int QuoteVehicleID { get; set; } 
     [DisplayName("Quote ID")] 
     public int QuoteID { get; set; } 
     [DisplayName("Model Year")] 
     public string ModelYear { get; set; }    
     //etc... 
    } 

Si je définir des valeurs dans le contrôleur, ils sont passés à la vue; mais si je mets ou change des valeurs dans la vue et les renvoie ... il y arrive, mais les valeurs sont nulles.

J'utilise ce Ajax.BeginForm:

@Using (Ajax.BeginForm("GetQuote", "Quote", 
     New With {.QuoteVehicle = JsonConvert.SerializeObject(Model.QuoteVehicle)}, 
     New AjaxOptions() With { 
           .UpdateTargetId = "PriceOptionsPanel", 
           .HttpMethod = "GET", 
           .OnComplete = "SetDatePickers", 
           .InsertionMode = InsertionMode.Replace, 
           .LoadingElementId = "loader" 
           } 
)) 

mes propriétés sont liées en tant que telle dans la forme:

@Html.TextBoxFor(Function(model) model.QuoteVehicle.Make, New With {.class = "form-control", .readonly = "readonly"}) 

et dans mon contrôleur:

Function GetQuote(QuoteVehicle As String) As ActionResult 
    Dim _quoteVehicle = JsonConvert.DeserializeObject(Of QuoteVehicle)(QuoteVehicle) 
    Return View(etc.) 
End Function 

I J'ai aussi essayé <HttpPost> et .HttpMenthod = "POST", mais cela n'a pas fonctionné non plus.

aiment savoir pourquoi ils ne sont pas ... être mis

Le modèle ressemble à ceci:

Public Class MenuOptionsModel  
     Public Property VIN() As String 
     Public Property QuoteVehicle() As QuoteVehicle 
     Public Property IsDecoded As Boolean  
     Public Property IsNew As Boolean = False 
     Public Property Is30Day As Boolean? 
     Public Property IsUnderWarranty As Boolean? 
    etc... 
End Class 

propriétés qui ne sont pas un objet, mais seulement les types (c.-à-booléenne ?, String) se lient bien, mais pas les propriétés dans l'objet.

+0

Pourquoi vous vouloir republier exactement le même objet que vous venez d'envoyer du serveur? –

+0

Pourquoi pas moi? L'objet est dans le modèle ... J'ai besoin de remplir cet objet avec les données de la vue - comment pourrais-je transmettre cette information? 20 champs séparés? –

+1

Je ne pense pas que vous comprenez - votre sérialisation du modèle sur le serveur, l'envoi au client, et le renvoi exactement le même modèle, pas tout ce qui a été édité. Supprimer votre 3ème paramètre de 'BeginForm()' et changer le paramètre de la méthode pour être votre modèle, pas un 'string' –

Répondre

0

Alors, se avère que vous ne pouvez pas le nom de votre objet pour ce que votre objet est, comme:

Public QuoteVehicle As QuoteVehicle 

Et puis l'utiliser comme:

Ajax.BeginForm("Action", "Controller", New With { .QuoteVehicle = Model.QuoteVehicle... 

Function GetQuote(QuoteVehicle As QuoteVehicle) As ActionResult 
    //access properties 
End Function 

Tout ce que je devais faire était renommer la propriété à SOMET Hing qui n'a pas été EXACTEMENT comme le type/nom ... comme de l'objet:

Public _quoteVehicle As QuoteVehicle  
Public NotNamedQuoteVehicle As QuoteVehicle 
etc... 

J'utilisé Public CurrentQuoteVehicle As QuoteVehicle

Et maintenant ceci fonctionne:

Ajax.BeginForm("Action", "Controller", New With { .CurrentQuoteVehicle = Model.QuoteVehicle... 

Function GetQuote(CurrentQuoteVehicle As QuoteVehicle) As ActionResult 
    //access properties 
End Function 
0

changement votre action type à QuoteVehicle et param utiliser HttpPost et .HttpMenthod = "POST"

Function GetQuote(model As QuoteVehicle) As ActionResult 
    //now you can access to your model here 
    Return View(etc.) 
End Function