MVC3提交新建表單後沒反應

  • 2241
  • 0
  • MVC
  • 2011-12-05

摘要: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)

运行

mvc

结果证实了postID字段启动了客户端的验证!

但是postID是我写的post模型的主键,应该由数据库自动插入的,所以最后的解决办法是:

删掉

@Html.HiddenFor(model => model.postID)

这行,因为postID应该是数据库自行插入,不需用户干预。

或者在post模型的

postID属性上加入[scaffoldcolumn(false)]属性声明,表示生成视图模板时,不为postID生成任何代码! 


人生到處知何似
應似飛鴻踏雪泥