2016-04-08 4 views
0

Ich habe hart gekämpft, um einen Datumswert aus Sicht zu greifen und speichern Sie es in der Datenbank als DateTime Geben Sie JSON AJAX verwenden, aber es wird immer als gespeichert null-Wert, in anderen Worten, wenn es die Postbacks Aktion des Controllers erreicht, wird der Datetime dh PurchaseDate Wert ist null, Ok, lassen sie mich es einen Haltepunkt setzen:Wie übergeben Sie einen Datumswert aus der Sicht auf Controller-Aktion mit JSON AJAX

enter image description here

beachten, dass in dem obigen Bild PURCHASE_DATE ist null, während, wenn ich console.log() das Salesmain-Objekt auf der Client-Seite vor der Ajax-Anfrage, es enthält die packte bewertet aus dem Textfeld, lässt console.log(salesmain):

enter image description here

So ist Kaufdatum eine Zeichenfolge aus einer Textbox packte:

<label>Purchase Date :</label> 
@Html.TextBox("PurchaseDate") 

Hier ist meine Ajax-Anforderung:

$.ajax({ 
     url: '/Sales/Create', 
     headers: headers, 
     data: JSON.stringify(salesmain), 
     type: 'POST', 
     dataType: 'json', 
     contentType : 'application/json', 
     traditional : true, 
     success: function (result) { 
      if (result.Success == "1") { 
       //alert("saved Successfully!"); 
      } 
      else { 
       alert(result.ex); 
      } 
     } 
    }); 

In dem obigen Code salesmain in einem json-Objekt, das die Daten enthält, die gleichzeitig in zwei Tabellen in der Datenbank gespeichert werden, mit einer Eins-zu-viele-Beziehung:

{ "SalesId": "", "SystemCode": "", "ReferenceNo": "", "SalesDate": "", "SalesPerson": "", "SalesSubs": [] } 

In dem obigen JSON Objekt ist SalesSub Array die viele Teil und dieser SalesSub enthält den PURCHASE_DATE Wert:

{ "ItemName": "", "Qty": "", "UnitPrice": "", "PurchaseDate": "", "SalesId": "", "SystemCode": "" } 

Diese one-to-many-Struktur haben das folgende Modell, das ist SalesMain CS-:

public class SalesMain 
{ 
    [Key, Column(Order = 0)] 
    public string SalesId { get; set; } 

    [Key, Column(Order = 1)] 
    public string SystemCode { get; set; } 

    public string ReferenceNo { get; set; } 
    public DateTime SalesDate { get; set; } 
    public string SalesPerson { get; set; } 

    public virtual ICollection<SalesSub> SalesSubs { get; set; } 
} 

und die entsprechende viele Beziehung mit SalesSub.cs:

[Key] 
    public int SalesSubId { get; set; } 

    public string ItemName { get; set; } 

    public int Qty { get; set; } 
    public decimal UnitPrice { get; set; } 

    public DateTime? Purchase_date { get; set; } 

    [ForeignKey("SalesMain"), Column(Order = 0)] 
    public string SalesId { get; set; } 

    [ForeignKey("SalesMain"), Column(Order = 1)] 
    public string SystemCode { get; set; } 

    public virtual SalesMain SalesMain { get; set; } 

Beachten Sie, dass PURCHASE_DATE vom Typ DateTime? und ich bin Wert als Zeichenfolge aus der Textbox bekommen, string != DateTime? dann kann es ein Modell Bindemittel Problem sein? Wenn ja, was soll ich tun, damit es funktioniert? Jeder bindende Wert in den beiden oben genannten Modellen ist mit Ausnahme des Purchase_date-Werts, der nach dem Postback immer einen Nullwert hat, bindend. Was soll ich tun, damit die Purchase_date eine Werte an der [HttpPost] Create Aktion eher als null Wert enthält? Jede Hilfe wird sehr geschätzt werden, Vielen Dank im Voraus :)

Antwort

1

Ihre Client-Seite Code ist ein Feld mit dem Namen PurchaseDate und Ihre SalesSub Klasse Eigenschaft Name ist Purchase_date. Modellbinder funktioniert nur, wenn beide übereinstimmen.

Ändern Sie den Namen Ihrer Ansichtsmodelleigenschaft in PurchaseDate und es wird funktionieren. Modellbinder kann eine gültige Zeichenfolge für die Datumszeit einer DateTime? Instanz zuordnen.

Verwandte Themen