C#将params传递给另一个视图

时间:2015-02-23 18:04:59

标签: c# asp.net-mvc model-view-controller

我有一个公司可以没有或一个或多个客户的设置。因此,Client表和Company表之间没有严格的关系。我创建了一个搜索视图,其中填充了所有公司。然后使用按钮,客户端可以附加到公司。我想使用ActionLink我能够实现这一点,所以我的搜索(视图)已经,

@Html.ActionLink("Book", "Book", new { id = a.CompanyId })

将模型循环以获取所有公司列表。现在,当我点击链接时,它会使用正确的参数填充地址,Companies/Book/1我正在玩的ID是1.这是正确的,但我登陆的View是一个新的客户模型。

public class CustomerModel
{
    [HiddenInput(DisplayValue = true)]
    public long CompanyId { get; set; }

    [HiddenInput(DisplayValue = false)]
    public long CustomerId { get; set; }

    [Display(Name = "Customer Name")]
    [Required(ErrorMessage = "* required")]
    public string CustomerName { get; set; }

    [Display(Name = "Address Line 1")]
    [Required(ErrorMessage = "* required")]
    public string AddressLine1 { get; set; }

    [Display(Name = "Postcode")]
    [Required(ErrorMessage = "* required")]
    public string Postcode { get; set; }

    [Display(Name = "Phone Number")]
    [Required(ErrorMessage = "* required")]
    [RegularExpression(@"\d*", ErrorMessage = "Not a valid phone number")]
    public string PhoneNo { get; set; }
}

即使我能够看到传递的ID(使用FireBug)是1,但是当我点击按钮将视图提交给控制器时,我得到一个0.为什么会这样?谁能帮助我?

编辑 - 1

这是控制器。

    public ActionResult Book()
    {
        return View(new CustomerModel());
    }

    [HttpPost]
    public ActionResult SaveCustomer(CustomerModel model)
    {
        _companyService.SaveCustomer(model);
        return RedirectToAction("Index");
    }

我尝试使用CompanyId代替id,但却出现了另一个错误。

  

在提交表格之前,地址栏有:http://localhost:53294/Companies/Book?CompanyId=1

     

提交表格后,地址栏有:http://localhost:53294/Companies/SaveCustomer

     
    

INSERT语句与FOREIGN KEY约束冲突" FK_dbo.Customer_dbo.Company_CompanyId"。冲突发生在数据库" BoilerServicing",table" dbo.Company",column' CompanyId'中。     声明已经终止。

  

保存方法本身,

    public void SaveCustomer(CustomerModel customer)
    {
        using (var db = new BoilerServicingDbContext())
        {
            Customer entity;
            if (customer.CustomerId > 0)
            {
                entity = db.Customers.First(x => x.Id == customer.CustomerId);
            }
            else
            {
                entity = new Customer();
                db.Customers.Add(entity);
            }

            entity.Name = customer.CustomerName;
            entity.TelephoneNumber = customer.PhoneNo;
            entity.AddressLine1 = customer.AddressLine1;
            entity.PostCode = customer.Postcode;
            entity.CompanyId = customer.CompanyId;

            db.SaveChanges();
        }
    }

1 个答案:

答案 0 :(得分:0)

好的,经过这么多尝试之后,我就来到了这里。我在控制器上更改了Action方法。

    public ActionResult Book(long id)
    {
        return View(new CustomerModel
        {
            CompanyId = id
        });
    }

这似乎已经在CompanyId中传递,我将进入Book视图。花了我一会儿,但我到了那里。谢谢你的帮助!