asp.net-mvc – 在发送到视图之前如何修改控制器动作中的表单数据?
|
我想在成功的操作(而不是使用RedirectToAction)之后渲染相同的视图,但是我需要修改渲染到该视图的模型数据.以下是一个演示的两个不起作用的方法的示例: [AcceptVerbs("POST")]
public ActionResult EditProduct(int id,[Bind(Include="UnitPrice,ProductName")]Product product) {
NORTHWNDEntities entities = new NORTHWNDEntities();
if (ModelState.IsValid) {
var dbProduct = entities.ProductSet.First(p => p.ProductID == id);
dbProduct.ProductName = product.ProductName;
dbProduct.UnitPrice = product.UnitPrice;
entities.SaveChanges();
}
/* Neither of these work */
product.ProductName = "This has no effect";
ViewData["ProductName"] = "This has no effect either";
return View(product);
}
有没有人知道正确的方法是完成这个? 解决方法在进一步研究之后,我有一个解释为什么以下代码在Action中没有影响:product.ProductName = "This has no effect"; ViewData["ProductName"] = "This has no effect either"; 我的视图使用HTML助手: <% Html.EditorFor(x => x.ProductName); 尝试查找密钥时,HTML Helpers使用以下优先顺序: > ViewData.ModelState字典条目 对于HTTP Post Actions,始终填充ModelState,因此直接修改Model(product.ProductName)或ViewData(ViewData [“ProductName”])没有任何作用. 如果您确实需要直接修改ModelState,这样做的语法是: ModelState.SetModelValue("ProductName",new ValueProviderResult("Your new value","",CultureInfo.InvariantCulture));
或者,要清除ModelState值: ModelState.SetModelValue("ProductName",null);
您可以创建一个扩展方法来简化语法: public static class ModelStateDictionaryExtensions {
public static void SetModelValue(this ModelStateDictionary modelState,string key,object rawValue) {
modelState.SetModelValue(key,new ValueProviderResult(rawValue,String.Empty,CultureInfo.InvariantCulture));
}
}
那么你可以简单地写: ModelState.SetModelValue("ProductName","Your new value");
有关详细信息,请参阅Consumption of Data in MVC2 Views. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC 4提供的反伪造令牌是为用户“”而是当前
- asp.net – “viewstate MAC的验证失败.如果这个应用程序由
- asp.net – WebResource Hell – 找不到资源
- asp.net – 如何在迭代字典项时更新值?
- asp.net-mvc – ASP.net身份在删除外部帐户后停止分发外部C
- asp.net-mvc – 添加一个默认的SelectListItem
- asp.net-mvc – ASP.NET MVC – 从单个控制器动作返回不同的
- ASP MVC Razor在输入占位符中编码特殊字符
- 剃刀 – MVC布局VS MVC主页
- 遭遇Asp.Net长文件名下载的问题和解决办法
- ASP.NET Core使用SkiaSharp实现验证码的示例代码
- asp.net – 是否有相当于mod_pagespeed Apache模
- asp.net – 无法将HttpHandler映射到“路径/ *”
- asp.net-core – CoreCLR中的MD5CryptoServicePr
- asp.net – 发布管理 – 发布给用户的一小部分 –
- asp.net-mvc – 传统的ASP.NET Web窗体与MVC
- 点击图片,AJAX删除后台图片文件的实现代码(asp.n
- asp.net-mvc – Json返回时如何读取modelstate错
- asp.net-mvc – ASP.NET MVC会话状态
- 在Azure网络应用程序中显示ASP.NET 5错误页面
