我是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>
.....
}
答案 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>
}