我有一个带有操作索引的ProductController (它加载一个空白表单)。表单还会发布到自身,因为它是一个复杂的表单,并且表单元素(如dropdowns )显示发布的值,代码如下
public ActionResult Index()
{
int id;
id = Convert.ToInt32(Request.Form["ddlLendingType"]);
if (id == 0)
id = 1;
ProductCommonViewModel viewData = new ProductCommonViewModel(_prodRepository.Method1(),_prodRepository.Method2())
return View(viewData);
}当我单击表单中的submit时,它将保存产品,如果失败,它将显示验证错误消息。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(FormCollection fc)
{
Product product = new Product();
try
{
...fill out all properties from form collection
_prodRepository.SaveProduct(product);
return RedirectToAction("Index", "Product");
}
catch (Exception ex)
{
TempData["Message"] = "An Error Occured while saving the product!";
Validation.UpdateModelStateWithRuleViolation(product, ViewData.ModelState);
// WHEN I call redirect to action Index on this view I can see the TempData variable but I cannot see validation summary and individual validation messages.How do I persist the msgs across requests?
}
} helper方法定义如下:
public static void UpdateModelStateWithRuleViolation(IRuleEntity entity, ModelStateDictionary dictModel)
{
List<RuleViolation> violations = entity.GetRuleViolations();
foreach (var item in violations)
{
dictModel.AddModelError(item.PropertyName, item.ErrorMessage);
}
}发布于 2009-06-30 10:57:50
也将modelstate传递给tempdata。
顺便说一句,不是这样:
public ActionResult Index()
{
int id; //and here You could join declaration with assignment
id = Convert.ToInt32(Request.Form["ddlLendingType"]);您可以这样做:
public ActionResult Index(int ddlLendingType)
{使用FormCollection是一种不应该使用的坏习惯。对于极端情况-创建自定义模型绑定器(CodeCampServer具有非常好的绑定机制)或操作过滤器(Kigg的源代码)。
发布于 2010-02-05 18:24:07
我在跨多个请求保留TempData时遇到了问题,我执行了以下操作,以便为每个重定向操作刷新TempData:
protected override RedirectToRouteResult RedirectToAction(string actionName,
string controllerName, System.Web.Routing.RouteValueDictionary routeValues)
{
TempData["Notice"] = TempData["Notice"];
TempData["Error"] = TempData["Error"];
TempData["Warning"] = TempData["Warning"];
return base.RedirectToAction(actionName, controllerName, routeValues);
}https://stackoverflow.com/questions/1063008
复制相似问题