我有一个公司可以没有或一个或多个客户的设置。因此,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();
}
}
答案 0 :(得分:0)
好的,经过这么多尝试之后,我就来到了这里。我在控制器上更改了Action方法。
public ActionResult Book(long id)
{
return View(new CustomerModel
{
CompanyId = id
});
}
这似乎已经在CompanyId中传递,我将进入Book视图。花了我一会儿,但我到了那里。谢谢你的帮助!