MVC HttpPost强类型模型null

时间:2016-07-08 06:13:48

标签: c# asp.net-mvc http-post

View Model看起来像这样:

public class AsmenysInfoViewModel2
{
    public asmenys_info Asmenys_info { get; set; }
    public List<miestai> Miestai { get; set; }
    public string Test { get; set; }
}

有两个动作。获取和发布。

    public ActionResult Index(long? id)
    {

        var model = new AsmenysInfoViewModel2();
        model.Test = "Test";
        model.Asmenys_info = BllFactory.DalFactory.AsmenysInfoDal.GetById(id.Value);
        return View(model);
    }
    [HttpPost]
    public ActionResult Index(AsmenysInfoViewModel2 asmenys_info)
    {
        var model = asmenys_info;
        return View(model);
    }

我的观点如下:

@model MODELS.AsmenysInfoViewModel2
@{
    ViewBag.Title = "Index";
}
@using (Html.BeginForm("Index", "AsmenysInfo", FormMethod.Post))
{
    @Html.ValidationSummary()
    @Html.TextBoxFor(m => m.Asmenys_info.adresas)       

    <input type="submit" value="Išsaugoti" />
}

如果我使用EditorFor或TextBoxFor无关紧要 - 结果相同。发布时我的模型属性“Asmenys_info”始终为null。如果我的类AsmenysInfoViewModel2不包含asmenys_info类型属性并且只包含“string,int etc”(没有强类型) - 它会起作用。 我的问题是:

如何发布具有强类型属性的视图模型,该属性在发布时不会为空?

2 个答案:

答案 0 :(得分:2)

您的模型具有名为Asmenys_info的属性,POST方法中的参数也名为asmenys_info。在DefaultModelBinder内部,Asmenys_info读取包含Asmenys_info值的表单数据的值,并尝试将属性string设置为该值,但由于没有{{1}的转换而失败一个复杂的对象。

将参数的名称更改为模型中属性名称以外的任何名称,它将绑定正常,例如

[HttpPost]
public ActionResult Index(AsmenysInfoViewModel2 model)

答案 1 :(得分:1)

使用其他对象名称

更改以下行
 public ActionResult Index(AsmenysInfoViewModel2 asmenys_info)
上述方法中的

使用对象的任何其他名称而不是 asmenys_info

因为mvc框架使用对象映射模型时,AsmenysInfoViewModel2类的asmenys_info和Asmenys_info属性存在问题。