添加新项目以列出mvc .net

时间:2014-04-28 01:01:54

标签: c# asp.net-mvc asp.net-mvc-4 view entity-relationship

我正在尝试将新项目添加到我的MVC应用程序中的现有列表中,我的问题是我不知道正确的方法。

到目前为止我已经这样做了:

我的客户代码:

控制器

public class CustomerController : Controller
{
    public CustomerBusiness customerBusiness { get; set; }

    public CustomerController()
    {
        customerBusiness = new CustomerBusiness();
    }

    //Some code that makes CRUD and more these methods

    [HttpGet]
    public ActionResult ViewAllJobOfferts(int id)
    {
        var cust = customerBusiness.GetById(id);
        return View(cust.JobOfferts);
    }

    public ActionResult CreateJobOffert(int id)
    {
        var cust = customerBusiness.GetById(id);
        return View(cust);
    }

   /* [HttpPost]
    public ActionResult CreateJobOffert(JobOffertModel jobOffert)
    {

        return View();
    }*/
}

我的实体Customer和JobOffert之间有 1到n 的关系,ViewAllJobOfferts方法运行正常,但是当我尝试添加新的JobOffert时,我遇到了困难。 我有几个问题,我们走了:

  • 我必须创建一个特殊于JobOfferts或控件的控制器 在CustomerController中?

  • 当我尝试创建将表单提交给新的视图时 JobOffert我不知道如何将客户链接到这个新客户 JobOffert,我尝试使用客户模型创建页面,我没有JobOffert属性,如果我使用JobOffert模型创建,我不知道如何使这两个对象之间的链接。我该怎么做?

PS:这里是两个模型的代码:

1 个答案:

答案 0 :(得分:0)

  

我必须创建一个特殊于JobOfferts的控制器,或者控制内部   CustomerController?

不一定,像其他类一样的控制器应该遵循SRP(单一责任原则)。在这种情况下,只要CustomerController提供与客户相关的信息,它就完全没问题了。

  

当我尝试创建将表单提交给新JobOffert的视图时,我不知道如何将客户链接到这个新的JobOffert,如果我尝试使用客户模型创建页面,我没有JobOffert属性,如果我使用JobOffert模型创建,我不知道如何使这两个对象之间的链接。我该怎么做?

客户与JobOffer之间的链接与您定义的一对多之间的链接相同,实体包含对彼此的引用。例如。您可以通过查询JobDffer表(其中customerID = 1024)找到Id为1024的客户的所有JobOffer。同样,每个JobOffer都可以通过实体类中的Customer引用进行跟踪。

现在关于为客户创建新的JobOffer,您可以采用以下方式:

    public class CustomerController : Controller
    {
    public CustomerBusiness customerBusiness { get; set; }

    public CustomerController()
    {
        customerBusiness = new CustomerBusiness();
    }

    //Some code that makes CRUD and more these methods

    [HttpGet]
    public ActionResult ViewAllJobOffersForCustomer(int customerId)
    {
        ICollection<JobOfferModel> model = customerBusiness.GetAllJobOffersByCustomerId(customerId);
        return View(model);
    }

    [HttpGet]
    public ActionResult CreateJobOffer()
    {
        // Blank model object to accept values from user, 
        // you may like to create a view model based on UI needs.
        JobOfferModel jobOfferModel = new JobOfferModel();
        return View(jobOfferModel);
    }

     [HttpPost]
     public ActionResult CreateJobOffer(JobOfferModel jobOffer)
     {
         // You get a filled object here that contains customer id and job offer details
         customerBusiness.CreateJobOffer(jobOffer);
         return RedirectToAction("ViewAllJobOffersForCustomer", new { customerId = jobOffer.CustomerId });
     }

示例业务服务类:

public class CustomerBusiness
{
    public ICollection<JobOfferModel> GetAllJobOffersByCustomerId(int customerId)
    {
        // TODO: Fetch job offer details from persistent store

        // E.g.
        // dataContext.JobOffers.Where(x => x.CustomerId == customerId).ToList();

        throw new NotImplementedException();
    }

    public void CreateJobOffer(JobOfferModel jobOffer)
    {
        // TODO: Add job offer details in persistent store

        // E.g.
        // dataContext.JobOffers.Add(jobOffer);
    }
}

修改过的实体类:

public class JobOfferModel
{
    [Key]
    public int Id { get; set; }

    public string Description { get; set; }

    [Required]
    [DefaultValue(false)]
    public bool Acepted { get; set; }

    [Required]
    [DefaultValue(true)]
    public bool Active { get; set; }

    [Required]
    [Column(TypeName = "DateTime2")]
    public DateTime JobDate { get; set; }

    [ForeignKey("Id")]
    public int CustomerId { get; set; }
    public virtual CustomerModel Customer { get; set; }
}

public class CustomerModel
{
    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Column(TypeName = "DateTime2")]
    public DateTime BirthDate { get; set; }
    public int PhoneNumber { get; set; }

    public ICollection<JobOfferModel> JobOffert { get; set; }
}

所以基本上你会在CustomerController中有一个返回空ViewModel或Model对象的方法。在视图中,您将隐藏customerId。因此,当表单发布时,它会与JobOffer详细信息一起映射到正确的客户。在HttpPost方法中拥有模型对象后,您只需在JobOffer表(任何持久性存储)中插入一个条目,其中customerId与之关联。

还有其他细节,但上面的典型方法会给你一个良好的开端我希望。干杯