在导航上传递模型是空的

时间:2016-05-10 13:51:42

标签: c# jquery ajax asp.net-mvc

我有一个MVC项目,我试图在导航时将serializedForm(构建LRSSearchMaster模型)传递给我的控制器。因此,如前所述,我有一个名为LRSSearchMaster的模型。当我调用页面更改时,它会成功传递我的所有参数,LRSSearchMaster除外。所有值都为null(即Party为null),即使它不应为null。在导航时,如何将此模型和一些额外参数传递给模型?

模型

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.");
    }
});

控制器

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);
}

2 个答案:

答案 0 :(得分:0)

我不确定你的代码在哪里&#34; oModel&#34;变量来自您的Javascript环境。假设oModel实际上包含它应该包含的东西,我怀疑Javascript中的AJAX参数名称应该是 model ,或者你的控制器变量应该是 oSearchByName

我在编写API2时只使用过JSON参数,所以如果你不能使JSON正常工作,你可能最好为模型中的每个字段传递一个Javascript字段,如: / p>

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

答案 1 :(得分:0)

所以我最近做的就是将我的模型转换为json字符串并将其发送给我的控制器。虽然我的参数仍为null,但我可以通过执行Request.QueryString [MyParameterName]

来访问该字符串。
url = '@Url.Action("SearchFilter", "SearchFilter")?model=' + JSON.stringify(data.oModel) + "&searchType=" + 1; window.location.href = url;

然后在我的控制器中我做了以下。

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

瓦哈拉!我现在拥有通过的所有内容。

我会使用表单提交,但客户希望能够将URL发送给某人。