2017-04-06 1 views
0

MVC를 처음 사용합니다. DropDownListFor를 사용하여 회사 이름 목록을 표시하고 선택에 따라 다른 고객 필드를 채 웁니다. 고객 필드가 잘 채워지지만 레코드를 POST하려고하면 회사 이름이 DropDownListFor에서 선택 되었더라도 "회사 이름이 필요합니다"라는 유효성 검증 오류가 발생합니다. 여기DropDownList 선택 저장되지 않음

 namespace CMSUsersAndRoles.Models 
{ 
    public class QuoteViewModel 
    { [Key] 
     [Display(Name = "Quote Id")] 
     public int QuoteId { get; set; } 
     // Columns from Customer table 
     [Required(ErrorMessage = "Please select a company")] 
     [Display(Name = "Customer Id")] 
     public int? CustomerId { get; set; } 
     [Display(Name = "Sales Rep")] 
     public string SalesRep { get; set; } 
     [Display(Name = "First Name")] 
     public string FirstName { get; set; } 
     [Display(Name = "Last Name")] 
     public string LastName { get; set; } 
     [Required] 
     public string Company { get; set; } 
     [Display(Name = "Address 1")] 
     public string Address1 { get; set; } 
     [Display(Name = "Address 2")] 
     public string Address2 { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
     [StringLength(10)] 
     [Display(Name = "Zip Code")] 
     [RegularExpression(@"^\d{5}(-\d{4})?$", ErrorMessage = "Invalid Zip Code")] 
     public string PostalCode { get; set; } 
     [Phone] 
     [Display(Name = "Work Phone")] 
     public string WorkPhone { get; set; } 
     [Phone] 
     [Display(Name = "Cell Phone")] 
     public string CellPhone { get; set; } 
     [EmailAddress] 
     public string Email { get; set; } 
     [Range(0, 100)] 
     public decimal? Discount { get; set; } 
     [Display(Name = "Payment Terms")] 
     public int? PaymentTerms { get; set; } 
     // Columns from QuoteDetail table 
     [Display(Name = "Quote Detail")] 
     public List<QuoteDetail> QuoteDetail { get; set; } 
     // Columns from Quote table 


     public decimal Subtotal { get; set; } 
     public decimal Tax { get; set; } 
     public decimal Total { get; set; } 
     [DataType(DataType.Date)] 
     [Display(Name = "Quote Date")] 
     public DateTime? QuoteDate { get; set; } 
     [DataType(DataType.Date)] 
     [Display(Name = "Good Until")] 
     public DateTime? GoodUntil { get; set; } 
     [DataType(DataType.Date)] 
     [Display(Name = "Quote Sent")] 
     public DateTime? QuoteSent { get; set; } 
     [DataType(DataType.Date)] 
     [Display(Name = "Date Approved")] 
     public DateTime? DateApproved { get; set; } 
     [DataType(DataType.Date)] 
     [Display(Name = "Date Ordered")] 
     public DateTime? DateOrdered { get; set; } 

    } 
} 

보기에서 코드입니다 : 여기

@Html.DropDownListFor(model => model.CustomerId, new SelectList(ViewBag.Customers, "CustomerId", "Company"), "---Select one---", new { htmlAttributes = new { @class = "company" } }); 
    @Html.HiddenFor(model => model.Company) 
    @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" }) 

는 가져 오기됩니다 다음은 뷰 모델이다

public ActionResult Create() 
     { 
      QuoteViewModel qvm = new QuoteViewModel(); 

      var customers = db.Customers.ToList(); 
      ViewBag.Customers = customers; 

      return View(qvm); 
     } 

그리고 여기에 POST 코드입니다 :

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create(QuoteViewModel qvm) 
{ 

if (ModelState.IsValid) 
      { 
       Quote quote1 = new Quote(); 

       quote1.CustomerId = qvm.CustomerId; 
       ... 
       customer.CustomerId = (int)qvm.CustomerId; 
       ... 
       customer.Company = qvm.Company;  

       db.Entry(customer).State = EntityState.Modified; 
       try 
        { 
         db.SaveChanges(); 
        } 
        catch (DbUpdateConcurrencyException ex) 
        { 

         var objContext = ((IObjectContextAdapter)db).ObjectContext; 
         // Get failed entry 
         var entry = ex.Entries.Single(); 
         // Now call refresh on ObjectContext 
         objContext.Refresh(RefreshMode.ClientWins, entry.Entity); 


        } 


       return RedirectToAction("Index"); 
      } 

      var customers = db.Customers.ToList(); 
      ViewBag.Customers = customers; 

      return View(qvm); 
     } 

내가 무엇이 누락 되었습니까? 어떤 도움을 많이 주시면 감사하겠습니다.

+0

회사 이름이 선택되지 않았습니다. 선택한 모든 것은 '고객 ID'(드롭 다운 목록이 바인딩되는 값)입니다. 관련 코드를 알려주지 않았습니다. –

+0

그리고 POST 메소드의'customer.Company = qvm.Company;'코드 행은 뷰 모델이 'Company Company' - 속성 모델을 가지고 있으므로 데이터 모델 인 속성을 포함하지 않는다고 제안합니다. –

+0

어떤 코드를보아야합니까? –

답변

0

아래의 HiddenFor 값을 설정하지 않았습니다. 고마워, 스테판 뮤케.

@Html.HiddenFor(model => model.Company) 
관련 문제