asp.net-mvc – TryUpdateModel的实例,ASP .NET MVC 3
|
我不明白,如何使用TryUpdateModel和保存MVC架构在同一时间。 如果我没有误,使用数据报文必须在模型中。所以,这样的代码 var db=new TestEverybody();//it is class,which was generated by EntityFramework var currentTesting=db.Testing.(t => t.id == id).First(); 必须位于模型中,不能在控制器中,不能吗? 但TryUpdateModel的用法的例子如下: public ActionResult Edit(Testing obj)//Testing collection
{
var db = new TestEverybody();
var currentTesting=db.Testing.(t => t.id == obj.id).First();
TryUpdateModel(currentTesting);
db.SaveChanges();
return RedirectToAction("Index");
}
这不会打破MVC架构吗?我们在控制器中使用数据库,而不是在特殊的Model类中。 那么,什么是在一个真正的项目中使用TryUpdateModel的最好的方法? 解决方法自从OP问以来,这里有一个ViewModel模式的例子,或者我喜欢调用它 – ASP.NET MVC正常完成。所以为什么要使用视图特定的模型 >您应该只将信息传递给您需要的视图。 我们将从一个简单的实体开始: public class Product {
public int Id {get;set;}
public string Name {get;set;}
public string Description {get;set;}
public decimal Price {get;set;}
}
让我们假设你有一个简单的表单,用户只能更新产品的名称和描述。但你使用(非常贪婪)TryUpdateModel。 所以我使用任何数量的工具(如Fiddler)自己构造一个POST并发送以下内容:
ASP.NET MVC模型绑定器将检查输入表单集合,看到这些属性存在于您的实体,并自动绑定为您。因此,当您刚刚从数据库中检索的实体上调用“TryUpdateModel”时,所有匹配的属性都将更新(包括Price!)。新选项的时间。 查看特定模型 public class EditProductViewModel {
[HiddenInput]
public Guid Id {get;set;}
[Required]
[DisplayName("Product Name")]
public string Name {get;set;}
[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description {get;set;}
}
这只包含我们需要的属性。注意,我们还添加了一些验证属性,显示属性和一些mvc特定属性。 通过不受我们在我们的视图模型中的限制,它可以使您的视图更清洁。例如,我们可以通过在我们的视图中显示以下内容来呈现整个编辑表单: @Html.EditorFor(model => model) Mvc将检查我们添加到视图模型中的所有属性,并自动连接验证,标签和正确的输入字段(即文本区域以供说明)。 发布表单 [HttpPost]
public ActionResult EditProduct(EditProductViewModel model) {
var product = repository.GetById(model.Id);
if (product == null) {
return HttpNotFound();
}
// input validation
if (ModelState.IsValid) {
// map the properties we **actually** want to update
product.Name = model.Name;
product.Description = model.Description;
repository.Save(product);
return RedirectToAction("index");
}
return View(model)
}
从这个代码它是很明显的它做什么。当我们更新实体时,我们没有任何不良影响,因为我们在我们的实体上显式设置属性。 我希望这解释了View-Model模式足以让你使用它。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Signalr中哪个更好的WebSocket或Long Polling?
- asp.net-identity – 使用SQL Server而不是LocalDB的Web AP
- 你应该在哪里定期登录asp.net-mvc?你应该使用ELMAH吗?
- asp.net-core – 当返回null而不是控制器中设置的值时,Mode
- asp.net-mvc-3 – 返回404错误ASP.NET MVC 3
- asp.net-mvc – 授权属性不工作MVC 5
- ASP.NET缓存的方法和最佳实践
- 剃刀 – 将MVC3应用程序迁移到MVC4:编译器错误消息:CS151
- ASP.NET 5中的全局异常处理
- Modular Web Application with ASP.NET Core
- asp.net-mvc-3 – 从Minifying中跳过单个文件?
- asp.net – 替换过时的System.Xml.XmlDataDocume
- asp.net-mvc – 静态文件请求正在ASP.NET MVC3中
- .net – 为什么我的剃刀视图抱怨“}预计”升级到
- asp.net – 在部分视图中强制使用没有Html.Begin
- asp.net-mvc-3 – 如何注入依赖项到global.asax.
- Asp.net视图状态MAC的验证失败
- asp.net-mvc – DataAnnotations和资源不能很好地
- asp.net-mvc – ASP.NET MVC3中的随机会话超时
- asp.net-mvc – 在OS X 10.7.4上的MonoDevelop中
