2017-03-03 2 views
0

Ich brauche dieses Objekt aus der Sicht auf die Steuerung zu übergeben:Pass-Objekt aus dem Blickfeld an dem Steuergerät 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... 
    } 

Wenn I-Wert in der Steuerung gesetzt, werden sie zu der Ansicht geführt; aber wenn ich Werte in der Ansicht setze oder ändere und sie zurück gebe ... es kommt dorthin, aber die Werte sind null.

Ich verwende dieses 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" 
           } 
)) 

meine Eigenschaften sind als solche in der Form gebunden:

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

und in meinem Controller:

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

I habe auch versucht <HttpPost> und .HttpMenthod = "POST", aber das hat auch nicht funktioniert.

Liebe zu wissen, warum sind sie nicht gesetzt werden ...

Das Modell sieht wie folgt aus:

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 

Eigenschaften, die nicht in einem Objekt, sondern nur Typen (dh Boolean ?, String) bind bind, aber Eigenschaften innerhalb des Objekts nicht.

+0

Warum genau posten Sie wollen das gleiche Objekt, das Sie gerade vom Server gesendet haben? –

+0

Warum sollte ich nicht? Das Objekt befindet sich im Modell ... Ich muss dieses Objekt mit den Daten aus der Ansicht füllen - wie sonst würde ich diese Information weitergeben? 20 getrennte Felder? –

+1

Ich glaube nicht, dass Sie es verstehen - Ihr Modell auf dem Server serialisieren, es an den Client senden und genau das gleiche Modell zurücksenden, nichts, was bearbeitet wurde. Entfernen Sie den dritten Parameter von 'BeginForm()' und ändern Sie den Methodenparameter zu Ihrem Modell, nicht zu einem 'String' –

Antwort

0

So stellt sich heraus, dass Sie nicht Ihr Objekt für das, was nennen kann Ihr Objekt ist, wie:

Public QuoteVehicle As QuoteVehicle 

Und dann verwenden sie es mögen:

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

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

Alles, was ich tun musste, war die Eigenschaft umbenennen SOMET Hing das war genau das nicht wie die Art/Name des Objekts ... wie:

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

benutzte ich Public CurrentQuoteVehicle As QuoteVehicle

Und jetzt funktioniert das:

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

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

Änderung Ihrer Aktion param Typ QuoteVehicle und verwenden Httppost und .HttpMenthod = „POST“

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