模型在mvc中的回发时显示null

时间:2017-05-21 18:04:28

标签: c# html asp.net asp.net-mvc-4

我是C#的初学者。当我将表单回发到服务器时,它在模型中显示null值。请帮忙我不知道该怎么办?

控制器代码

[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = "administrator")]
public ActionResult ChangeUserDetail(ChangeUserDataModel model)
{
    // ....
}

型号代码

public class ChangeUserDataModel
{
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Display(Name = "Update Field")]
    public string Change { get; set; }

    [Required]
    public string Value { get; set; }
}

查看代码

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post)
{
    var model2 = new Webrims.Models.AdminViewModel.ChangeUserDataModel();
    <div class="form-group">
        @Html.LabelFor(m => model2.UserName)
        <div class="col-md-8">
            @Html.DropDownListFor(m => model2.UserName, new 
                SelectList(ViewBag.UserNames, "Value", "Text")
        </div>
    </div>
    .....
}

2 个答案:

答案 0 :(得分:2)

我认为这一行

var model2 = new Webrims.Models.AdminViewModel.ChangeUserDataModel();

不正确。为什么你需要在这里发起一个模型?

在MVC架构中,View接收从Controller传递的Model。 View不会创建稍后将使用的Model。所以通常在你的GET请求中你应该传递一个epmty模型,在POST上,这个模型将根据你POST形式包含的值创建。

在代码方面。预期是这样的:

查看

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post)
{      
    <div class="form-group">
        @Html.LabelFor(m => m.UserName)
        <div class="col-md-8">
            @Html.DropDownListFor(m => m.UserName, new 
                SelectList(ViewBag.UserNames, "Value", "Text")
        </div>
   </div>
}

此外,在视图的顶部,您应该定义您要展示的模型的类型:

@model Webrims.Models.AdminViewModel.ChangeUserDataModel

答案 1 :(得分:0)

在视图中使用此代码,应该可以。

    @model Webrims.Models.AdminViewModel.ChangeUserDataModel

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post)
     {

       <div class="form-group">
         @Html.LabelFor(m => Model.UserName)
         <div class="col-md-8">
         @Html.DropDownListFor(m => Model.UserName, new 
         SelectList(ViewBag.UserNames, "Value", "Text")
         </div>
       </div>
}