我对 ASP.NET MVC 3 应用程序有一个奇怪的需求,它阻碍了我当前的进度。情况如下:
我有一个小的产品搜索引擎,我在多个页面上呈现这个搜索引擎。product
此 SE 向控制器的操作发出 HTTP POST 请求search
。到这里还好。
假设我在home
控制器的index
操作(/home/index)上。我进行搜索并检查是否ModelState.IsValid
. 结果,它是无效的。所以,我应该用输入的模型返回这个(这样用户就不会丢失值)和模型状态错误。但是当我这样做时,我最终得到了预期的不同 URL(/product/search)。
如果我进行重定向,我会丢失ModelState
并且无法显示错误消息。
到目前为止,我有不同的解决方案,它们看起来都很脏。任何的想法?
编辑
这是一个小项目,它证明了这一点:
这是ProductController
:
public class ProductController : Controller {
[HttpPost]
public ActionResult Search(SearchModel searchModel) {
if (ModelState.IsValid) {
//Do some stuff...
return RedirectToAction("Index", "SearchResult");
}
return View(searchModel);
}
}
这是SearchModel
:
public class SearchModel {
[Required]
public string ProductCategory { get; set; }
[Required]
public string ProductName { get; set; }
}
这是 *_SearchPartial*:
@model MvcApplication20.SearchModel
@using (Html.BeginForm("search", "product"))
{
@Html.EditorForModel()
<input type="submit" value="Search" />
}
最后这是呈现 *_SearchPartial*的Home
控制器操作视图:Index
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
@Html.Partial("_SearchPartialView")
在这里,当我提交表单并且模型状态失败时,我应该如何进行Product
控制器Search
操作?