Asp.net mvc 3 为什么我的[HttpPost]方法没有启动?
我在MVC3.0 Razor视图中创建了一个页面。 Create.cshtmlAsp.net mvc 3 为什么我的[HttpPost]方法没有启动?,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我在MVC3.0 Razor视图中创建了一个页面。 Create.cshtml @model LiveTest.Business.Models.QuestionsModel @*<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.valida
@model LiveTest.Business.Models.QuestionsModel
@*<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*@
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td>@Html.LabelFor(model => model.TestID)
</td>
<td>
@Html.DropDownListFor(model => model.TestID, (IEnumerable<SelectListItem>)ViewBag.ItemIDList)@Html.ValidationMessageFor(model => model.TestID)
</td>
</tr>
<tr>
<td>@Html.LabelFor(model => model.Question)
</td>
<td>@Html.EditorFor(model => model.Question)@Html.ValidationMessageFor(model => model.Question)
@Html.HiddenFor(model => model.QuestionsID)
</td>
</tr>
<tr>
<td>@Html.LabelFor(model => model.IsRequired)
</td>
<td>@Html.CheckBoxFor(model => model.IsRequired)@Html.ValidationMessageFor(model => model.IsRequired)
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
</table>
}
问题:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
如果我在Create.cshtml页面中添加上述两行,然后按下submit按钮,那么如果我在*Question字段中输入值,然后按下submit按钮,则将触发验证消息“Question is required!”,我的[HttpPost]Create
方法将永远不会执行*
如果我从页面中删除上述两行,然后按提交按钮,它将执行[HttpPost]创建
方法,并从服务器端启动验证。如果我在问题字段中输入值,则还将执行[HttpPost]创建
请帮助我。我会检查在尝试提交表单时是否出现任何客户端错误。从浏览器控制台进行检查
另外,在提交表单之前,请确保您已完成代码且没有验证错误。我将检查在尝试提交表单时是否出现任何客户端错误。从浏览器控制台进行检查
另外,在提交表单之前,请确保您已完成代码,没有验证错误。您是说表单不会验证客户端,并且不会将任何内容发送回服务器 也就是说,单击“提交”按钮,浏览器中不会发生任何事情,对吗
问题可能是您的表单没有使用不引人注目的javascript库验证进行验证。您是说表单没有验证客户端,并且没有任何内容被发送回服务器 也就是说,单击“提交”按钮,浏览器中不会发生任何事情,对吗
问题可能是您的表单没有使用不引人注目的javascript库验证进行验证。问题模型类包含一个属性
CreatedBy
,该属性未包含在您的视图中
尝试将CreatedBy
添加为隐藏字段,或者(更好地)从QuestionsModel类中删除CreatedBy
,因为它不是应该在视图中公开的属性
我怀疑这件丢失的财产是问题的原因
更新
我对您的代码运行了一些测试,它不是CreatedBy
属性。相反,您的问题是您没有提供QuestionsID
值,而是在表单上包含了QuestionsID的隐藏字段
由于QuestionsID是一种值类型,因此默认情况下,DataAnnotationsModelValidatorProvider
会向QuestionsID字段添加所需的验证器。由于该字段没有ValidationMessage,因此无法看到验证错误
您可以按照中的说明覆盖默认DataAnnotationsModelValidatorProvider的行为。中的说明
QuestionsModel
类包含一个属性CreatedBy
,该属性未包含在您的视图中
尝试将CreatedBy
添加为隐藏字段,或者(更好地)从QuestionsModel类中删除CreatedBy
,因为它不是应该在视图中公开的属性
我怀疑这件丢失的财产是问题的原因
更新
我对您的代码运行了一些测试,它不是CreatedBy
属性。相反,您的问题是您没有提供QuestionsID
值,而是在表单上包含了QuestionsID的隐藏字段
由于QuestionsID是一种值类型,因此默认情况下,DataAnnotationsModelValidatorProvider
会向QuestionsID字段添加所需的验证器。由于该字段没有ValidationMessage,因此无法看到验证错误
您可以按照中的说明覆盖默认DataAnnotationsModelValidatorProvider的行为。客户端无表单验证可正常工作,但如果我填写所有必填字段,然后按submit按钮,则不会收到回发。即使我在浏览器中也没有收到任何验证错误,客户端没有表单验证工作正常,但如果我填写所有必填字段,然后按提交按钮,则不会收到回发。即使我在浏览器中也没有收到任何验证错误,客户端没有表单验证工作正常,但如果我填写所有必填字段,然后按提交按钮,则不会收到回发。即使我在浏览器中也没有收到任何验证错误,客户端没有表单验证工作正常,但如果我填写所有必填字段,然后按提交按钮,则不会收到回发。即使我在browserno中没有收到任何验证错误,这也不是问题的原因,因为我有几个其他表单,其中包含一些我在视图中没有使用过的字段,但它仍在工作。不,这不是问题的原因,因为我有几个其他表单,其中包含一些我在视图中没有使用过的字段,但仍然有效正在工作。我可能有点过分,但您是否将jquery库作为核心?我在这里只看到了验证插件,但没有看到库。我可能有点不对劲,但你是否将jquery库作为核心?我在这里只看到验证插件,没有看到库。
public class QuestionsModel : IQuestionsModel
{
[ReadOnly(true)]
public Guid QuestionsID { get; set; }
[Required]
[DisplayName("Question")]
public string Question { get; set; }
[DisplayName("Test ID")]
public Guid TestID { get; set; }
[DisplayName("Is Required")]
public bool IsRequired { get; set; }
[DisplayName("Created By")]
public Guid CreatedBy { get; set; }
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>