我不知道自己做得不好。
控制器:
public class PictureController : Controller
{
// GET: Picture
public ActionResult Index()
{
return View();
}
public ActionResult AddGroup()
{
ModelPhotoGroup p = new ModelPhotoGroup();
return View(p);
}
[HttpPost]
public ActionResult AddGroup(ModelPhotoGroup p)
{
return View(p);
}
}
在AddGroup of HttpPost中,我得到一个p.GroupName = null,但我在文本框中写文字
查看:
@model Boda.WebUI.Models.ModelPhotoGroup
@{
ViewBag.Title = "";
}
<h2>Crear grupo de fotos</h2>
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-6 col-md-offset-3 col-sm-8 col-md-offset-2">
<div class="well">
@using (Html.BeginForm())
{
@Html.HiddenFor(x => x.GroupName)
<div class="form-group">
@Html.LabelFor(x => x.GroupName)
@Html.TextBoxFor(x => x.GroupName, new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.GroupName)
</div>
<div class="btn-group">
<input type="submit" value="Guardar" class="btn btn-success" />
@Html.ActionLink("Cancelar y volver a la lista de Fotografias", "Index", null, new
{
@class = "btn btn-default"
})
</div>
}
</div>
</div>
</div>
这是观点。只有一个TextBoxt可以写出组的名称
HTML生成:
<form action="/Picture/AddGroup" method="post"><input id="GroupName" name="GroupName" type="hidden" value=""> <div class="form-group">
<label for="GroupName">GroupName</label>
<input class="form-control" id="GroupName" name="GroupName" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="GroupName" data-valmsg-replace="true"></span>
</div>
<div class="btn-group">
<input type="submit" value="Guardar" class="btn btn-success">
<a class="btn btn-default" href="/Picture">Cancelar y volver a la lista de Fotografias</a>
</div>
答案 0 :(得分:1)
您已包含
@Html.HiddenFor(x => x.GroupName)
前
@Html.TextBoxFor(x => x.GroupName)
隐藏输入的值将是初始化模型时GroupName
的默认值(即null
)
POST时,DefaultModelBinder
将属性GroupName
的值设置为从表单数据(隐藏输入的数据)中读取的第一个值,并忽略具有相同名称的任何后续值,因此该属性始终为null
。
删除隐藏的输入,您的模型将与文本框中的值正确绑定。
答案 1 :(得分:0)
这是因为你没有指定动作和控制器, 在表单中添加操作和控制器的名称
@using(Html.BeginForm("AddGroup","Picture"))