我有一个带有以下 url 的表单: CreateEntity?officeCodeId=5
当我发送表单进行验证时,如果验证失败,它只返回 CreateEntity url。没有 officeCodeId=5。
如果用户在 URL 或 F5 上单击输入 - 我的站点失败 - 它需要缺少 officecodeId 参数。我可以将它保存到 session 或其他存储中。但我想把它放在 URL 中
我的看法:
[HttpGet]
public virtual ActionResult CreateEntity(int? officeCodeId)
{
var model = new CreateViewModel();
FillViewModel(model, officeCodeId);
return View("Create", model);
}
[HttpPost]
protected virtual ActionResult CreateEntity(TEditViewModel model)
{
if (ModelState.IsValid)
{
//Do some model stuff if
}
return View("Create", model);
}
编辑。 我的观点:
using (Html.BeginForm("CreateEntity", "Employee", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(x => x.OfficeCodeId)
<div>
@Html.LabelFor(model => model.FirstName, CommonRes.FirstNameCol)
@Html.TextBoxFor(model => model.FirstName, Model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div>
@Html.LabelFor(model => model.LastName, CommonRes.LastNameCol)
@Html.TextBoxFor(model => model.LastName, Model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div> <div class="input-file-area"></div>
<input id="Agreements" type="file" name="Agreements"/>
</div>
编辑 2。 添加:
@using (Html.BeginForm("CreateEntity", "Employee", FormMethod.Post, new { officeCodeId = Model.OfficeCodeId, enctype = "multipart/form-data" }))
没有帮助。 它产生以下形式:
<form action="/PhoneEmployee/CreateEntity" enctype="multipart/form-data" method="post" officecodeid="5">
解决方案是
<form action="@Url.Action("CreateEntity", "Employee")?officecodeid=@Model.OfficeCodeId" enctype="multipart/form-data" method="post">
最佳答案
问题是您的 HttpPost
操作没有任何 id
参数的概念。如果你想支持类似的 URL,那么让 Action 签名支持该参数,例如
[HttpGet]
public ActionResult CreateEntity(int? officeCodeId)
[HttpPost]
public ActionResult CreateEntity(int officeCodeId, EditViewModel model);
关于c# - 表单验证失败时缺少查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789238/