摘要:MVC3提交新建表单后没反应
今天在学习MVC的时候,发现在添加内容的时候,提交表单缺毫无反应。
后台的controller有如下代码,正常来说,提交表单后应该会调用第二个Create函数的,下断点后发现根本没有调用到!
public ViewResult Create()
{
return View();
}
[HttpPost]
public void Create(Post post)
{
postDB.Posts.Add(post);
postDB.SaveChanges();
}
Create视图文件是自动生成的,scaffold模板选的是Edit,生成部分代码如下:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Post</legend>
@Html.HiddenFor(model => model.postID)
<div class=”editor-label”>
@Html.LabelFor(model => model.content)
</div>
<div class=”editor-field”>
@Html.EditorFor(model => model.content)
@Html.ValidationMessageFor(model => model.content)
</div>…..
查看教程后,发现和能正常提交的表单代码区别在于多了
@Html.HiddenFor(model => model.postID)
这行,说明问题应该就在这里,查看运行后网页源代码,发现
<input data-val=”true” data-val-number=”The field postID must be a number.” data-val-required=”postID 字段是必需的。” id=”postID” name=”postID” type=”hidden” value=”" />
这句,说明postID启动了客户端验证,需要输入postID。
在
@Html.HiddenFor(model => model.postID)
后插入
@Html.ValidationMessageFor(Model => Model.postID)
运行
结果证实了postID字段启动了客户端的验证!
但是postID是我写的post模型的主键,应该由数据库自动插入的,所以最后的解决办法是:
删掉
@Html.HiddenFor(model => model.postID)
这行,因为postID应该是数据库自行插入,不需用户干预。
或者在post模型的
postID属性上加入[scaffoldcolumn(false)]属性声明,表示生成视图模板时,不为postID生成任何代码!
人生到處知何似
應似飛鴻踏雪泥