gpt4 book ai didi

asp.net-mvc - Asp.Net MVC2 TekPub Starter Site 方法问题

转载 作者:行者123 更新时间:2023-12-04 23:52:09 27 4
gpt4 key购买 nike

好的,我刚刚遇到了这个问题,我应该只是检查我的电子邮件,但是我最终看到了这个(并且订阅了 TekPub 不远)。

http://tekpub.com/production/starter

现在这个应用程序是一个很好的起点,但它给我带来了一个问题,以及我已经被证明遵循的开发过程(正确或错误)。将数据传递到 View 时,不会从 LinqToSql 对象进行转换。这有什么负面的吗?

我可以看到的主要是验证,这在使用 MVC 的内置验证时是否会导致问题,因为这是我们广泛使用的东西。因为我们使用的是 LinqToSql 生成的内置对象,所以如何添加验证,比如

[Required(ErrorMessage="Name is Required")]
public string Name {get;set;}

有兴趣了解这种方法的好处以及我们应该接受它的任何负面影响,以及在开发过程中的体验。

是否应该将此作为指导,我们应该使用 ViewModels 吗?如果是这样,即使在简单的情况下,我们也应该始终使用它们吗?实体在应用程序逻辑中如何/在何处转换为 ViewModel?

最佳答案

对于实体对象,您可以使用伙伴类,从而创建第二个类,作为实体的元数据提供者。例如,使用 Linq-to-Sql 生成的 Customer 实体,我可以像这样创建一个伙伴类:

[MetadataType(typeof(CustomerMeta))]
partial class Customer {

}

public class CustomerMeta {

[DisplayName("Forename", Required(ErrorMessage = "Forename is required.")]
public string Forename { get; set;}
}

实体作为部分类生成,因此您可以向它们添加自己的代码。

或者,您可以放弃将实体类型推送到您的 View ,并根据所需的功能创建特定模型,例如我通常会有一个用户实体,但是当我需要创建一个用户时,我有一个称为 CreateUserSpec 模型的东西:
public class CreateUserSpec
{
[DisplayName("Forename")]
public string Forename { get; set; }
}

其中具有用户属性的子集,只有创建用户所需的那些。这是我将传递给我的 View 并从表单数据重新填充的模型。例如:
public class AccountController
{
public ActionResult Register() {
return View(new CreateUserSpec());
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(CreateUserSpec spec) {
if (!ModelState.IsValid) {
return View(spec);
}

var user = UserFactory.CreateUser(spec);

// Redirect to authorisation page?
}
}

关于asp.net-mvc - Asp.Net MVC2 TekPub Starter Site 方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com