2015-02-23 3 views
0

У меня есть настройка, в которой у Компании не может быть ни одного, ни одного или нескольких клиентов. Таким образом, нет строгих отношений между таблицей «Клиент» и «Компанией». Я создал окно поиска, в котором все компании заполнены. Затем, используя кнопку, клиент может быть прикреплен к компании. Я думал, что с помощью ActionLink я смог бы добиться этого, так что мой поиск (вид) имеетC# Переход параметров к другому виду

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

где модель накинута, чтобы получить весь список компании. Теперь, когда я нажимаю ссылку, она заполняет адрес с правильными параметрами, Companies/Book/1 ID, с которым я играю, - это 1. Что правильно, однако представление «Я приземляюсь» - это новая модель клиента.

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

Несмотря на то, что я в состоянии видеть идентификатор передается (с помощью FireBug) является 1, так или иначе, когда я нажимаю на кнопку, чтобы представить вид на контроллер я получаю 0. Почему это было бы? Может ли кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ - 1

Это контроллер.

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

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

Я попытался с помощью CompanyId вместо идентификатора, он придумал другую ошибку.

Перед отправкой формы, адресная строка имеет: http://localhost:53294/Companies/Book?CompanyId=1

После отправки формы, адресная строка имеет: http://localhost:53294/Companies/SaveCustomer

Заявление INSERT конфликтного с ограничением FOREIGN KEY «FK_dbo.Customer_dbo. Company_CompanyId». Конфликт произошел в базе данных «BoilerServicing», таблице «dbo.Company», в столбце «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(); 
     } 
    } 
+4

Можете ли вы опубликовать свой метод контроллера? – dotnetom

+0

такой же вопрос здесь? #PaulFrancis –

+0

@dotnetom, я закончил работу сейчас, обновит сообщение через несколько минут, когда вернусь домой. Я попытался использовать companyId, но дам это другому. – PaulFrancis

ответ

0

Хорошо, после попытки так много способов, я пришел к этому. Я изменил метод Action на контроллере.

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

Это, кажется, прошло в компании. Я перехожу в Книжный вид. Взял меня немного, но я добрался туда. Спасибо за вашу помощь !

Смежные вопросы