2016-05-10 4 views
1

Ich habe ein MVC-Projekt und versuche, die serializedForm, die das LRSSearchMaster Modell baut, an meine Steuerung beim Navigieren übergeben. Also, wie bereits erwähnt, habe ich ein Modell namens LRSSearchMaster. Wenn ich die Seitenänderung anrufe, übergibt sie alle meine Parameter erfolgreich, mit Ausnahme der LRSSearchMaster. Alle Werte sind null (d. H. Partei ist null), obwohl sie nicht null sein sollte. Wie kann ich dieses Modell und einige zusätzliche Parameter beim Navigieren an das Modell weitergeben?Passing Model auf Navigation ist Null

Modell

public partial class LRSSearchMaster 
{ 
    public LRS_Party Party { get; set; } 
    public LRS_Settings Settings{ get; set; } 
    public LRS_IndexedInstrument IndexedInstrument { get; set; } 
    public LRS_InstrumentSubType InstrumentSubType { get; set; } 

    [UIHint("DateFilter")] 
    [DisplayName("Date Filter")] 
    public int dateFilterValue { get; set; } = 0; 

    public LRS_BookTypes BookTypes { get; set; } 

    public DateTime fromDateFile { get; set; } 
    public DateTime toDateFile { get; set; } 
    public String ReverseSearchName { get; set; } 

    public int grp { get; set; } 

    public bool selectFile { get; set; } = false; 
} 

HTML

<a href='@Url.Action("SearchFilter1", "SearchFilter")' onclick='navigate(this.href);'> 
    @*<input type="button" value='Submit' />*@ 
    <input id="btnSearch" type="button" value='Search (F8)' /> 
</a> 

Ajax

$.ajax({ 
    url: "@Url.Action("SearchByNameLookUp", "SearchByName")", 
    data: JSON.stringify({ oSearchByName: oModel }), 
    type:"POST", 
    success: function (data) 
    { 
     if (data.succeed != true) 
     { 
      alert(data.errors); 
      bContinue = false; 
     } 
     else 
     { 
      oModel = data.oModel; 
      url = target + "?SM=" + JSON.stringify(data.oModel) + "&searchType=" + 1; 
      window.location.href = url 
     } 
    }, 
    error: function (data) 
    { 
     alert("Error creating/loading Case. Please refresh the page and try again."); 
    } 
}); 

Contr olle

public ActionResult SearchFilter(LRSSearchMaster model, int searchType = 0) 
{ 
    List<LRSSearchMaster> liSM = GetFilteredResults(model, searchType); 
    ViewBag.searchType = searchType; 
    return View("~/Areas/LRSSearch/Views/SearchFilter/SearchFilter.cshtml", liSM); 
} 

Antwort

0

Ich bin aus dem Code nicht sicher, wo "oModel" Variable aus in Ihrer Javascript-Umgebung kommt. Vorausgesetzt, dass oModel tatsächlich enthält, was es sollte, würde ich vermuten, dass entweder Ihr AJAX-Parametername in JavaScript Modell sein sollte, oder Ihre Controller-Variable sollte oSearchByName sein.

ich immer nur JSON für die Parameter verwendet habe, wenn jedoch API2 schreiben, wenn Sie also nicht die JSON Arbeits bekommen können, könnte man besser sein, ein Javascript-Feld in dem Modell für jedes Feld vorbei wie:

{ model_Var1: 'a', model_Var2: 'b', ... } 
+0

Ja, es heißt derzeit Modell. Ich habe gelesen, dass es das Modell nicht besteht, weil eine Navigation eine Get-Methode ist? Sie waren ältere Posts, also weiß ich nicht, ob das noch immer so ist. Oder könnte es möglicherweise sein, weil ich mehrstufige Ebenen im Modell habe? Bedeutung der Party-Klasse ist in der LRSSearchMaster. Es ist also LRSSearchMaster.Party.SearchName. Könnte das der Grund sein, warum es vielleicht null ist? – Godrules500

0

Also, was ich tat, war mein Modell in eine JSON-String zu konvertieren und schickte es an meine Steuerung. Obwohl meine Parameter noch null war, konnte ich die Zeichenfolge für den Zugriff durch Request.QueryString tun [MyParameterName]

url = '@Url.Action("SearchFilter", "SearchFilter")?model=' + JSON.stringify(data.oModel) + "&searchType=" + 1; window.location.href = url; 

Da ist in meinem Controller habe ich die folgenden.

model = JsonConvert.DeserializeObject<LRSSearchMaster>(Request.QueryString["model"]); 

Und wahlah! Ich habe jetzt alles, was passiert ist.

Ich hätte ein Formular senden, aber der Client wollte in der Lage sein, die URL an jemanden zu senden.