Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Net MVC2 TekPub入门网站方法问题_Asp.net Mvc_Architecture - Fatal编程技术网

Asp.net mvc Net MVC2 TekPub入门网站方法问题

Asp.net mvc Net MVC2 TekPub入门网站方法问题,asp.net-mvc,architecture,Asp.net Mvc,Architecture,好吧,我刚刚遇到了这个问题,我本应该只是查看我的电子邮件,但我最终还是看了这个(而且离订阅TekPub不远) 现在这个应用程序是一个很好的起点,但它给我提出了一个问题,以及我被证明遵循的开发过程(正确或错误)。将数据传递到视图时,不会从LinqToSql对象进行转换。对这件事有什么异议吗 我能看到的主要问题是验证,当使用MVC的内置验证时,这是否会导致问题,因为这是我们广泛使用的东西。因为我们使用的是LinqToSql生成的内置对象,那么如何添加验证呢 [Required(ErrorMessa

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

现在这个应用程序是一个很好的起点,但它给我提出了一个问题,以及我被证明遵循的开发过程(正确或错误)。将数据传递到视图时,不会从LinqToSql对象进行转换。对这件事有什么异议吗

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

[Required(ErrorMessage="Name is Required")]
public string Name {get;set;}
有兴趣了解这种方法的好处,以及我们在开发过程中的经验所带来的任何负面影响


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

对于实体对象,可以使用buddy类,从而创建第二个类,作为实体的元数据提供程序。例如,使用Linq to Sql生成的客户实体,我可以创建一个buddy类,如下所示:

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

}

public class CustomerMeta {

  [DisplayName("Forename", Required(ErrorMessage = "Forename is required.")]
  public string Forename { get; set;}
}
实体作为分部类生成,因此您可以向其中添加自己的代码

或者,您可以放弃将实体类型推送到视图中,并根据所需的功能创建特定的模型,例如,我通常会有一个用户实体,但当我需要创建用户时,我有一个称为CreateUserSpec模型的模型:

public class CreateUserSpec
{
  [DisplayName("Forename")]
  public string Forename { get; set; }
}
其中包含用户属性的子集,仅包含创建用户所需的属性。这是我将传递到视图并从表单数据重新填充的模型。例如:

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?
  }
}

谢谢-在您的应用程序逻辑中,您在哪里执行从实体到模型的转换?这取决于您如何管理您的关注点。目前我更喜欢瘦控制器,所以大部分工作都是通过工厂或存储库完成的。我已经更新了上面的示例。