Tôi gặp sự cố với ứng dụng của mình, hãy thử giải thích bằng ví dụ, tôi có biểu mẫu, biểu mẫu này tồn tại một số hộp văn bản và danh sách thả xuống. Đối với reusability tôi sáp nhập 3 thả xuống danh sách vào một phần xem, này xem một phần tôi tải với @ Html.Action, điều này hoạt động ok, khi tôi bắt đầu hình thức tôi thấy mọi thứ xuất hiện như nó phải được, mặc dù tôi không biết tại sao nhưng những người yêu cầu danh sách thả xuống trực tiếp được hiển thị với bắt đầu màu đỏ và cho biết đó là trường bắt buộc.MVC 3 Thuộc tính mô hình không được đặt ở chế độ xem từng phần được gọi là html.action
Nhưng khi tôi điền mọi thứ vào và tôi chọn các giá trị từ danh sách thả xuống và tôi nhấp vào OK, giá trị từ danh sách thả xuống là NULL.
Tôi nghĩ rằng nó sẽ được comprehendable hơn với một mã ví dụ:
mô hình chi tiết:
public class FormModel
{
[Required]
public string UserName { get; set; }
[Required]
[Display(Name = "Birthdate")]
public DateTime? Birthdate { get; set; }
//This is what i'm talking about, that is not being set, the location
public Location Location { get; set; }
}
Đây là lớp vị trí, sau đó được thông qua để xem một phần và thường tôi nghĩ rằng nên thiết lập, nó trông như thế này:
public class Location
{
[Required]
[Display(Name = "Country")]
public string CountryId { get; set; }
[Required]
[Display(Name = "Region")]
public string RegionId { get; set; }
[Required]
[Display(Name = "City")]
public string CityId { get; set; }
}
Bây giờ chúng ta có một cái nhìn cục bộ cho các vị trí:
@model TestWebsite.Models.Location
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.CountryId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.CountryId, Model.Countries, "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.CountryId)
</td>
</tr>
<!-- Region -->
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.RegionId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.RegionId, Enumerable.Empty<SelectListItem>(), "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.RegionId)
</td>
</tr>
<!-- City -->
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.CityId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.CityId, Enumerable.Empty<SelectListItem>(), "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.CityId)
</td>
</tr>
Sau đó, chúng ta gọi là xem phần này dưới các hình thức như thế này:
@Html.Action("LocationGroup", "Account", Model.Location)
Và cuối cùng trong bộ điều khiển:
[ChildActionOnly]
public ActionResult LocationGroup(Location model)
{
model.Countries = GetCountries();
return PartialView("_LocationView", model);
}
Tôi biết điều đó là rất nhiều mã, nhưng tôi hy vọng bạn có thể giúp tôi ...
** Nhưng khi tôi điền mọi thứ vào và chọn giá trị từ danh sách thả xuống, và tôi nhấp vào OK, các giá trị từ danh sách thả xuống là NULL. ** Bạn đã thử gửi các biểu mẫu với 'JQuery/JSON' hay bạn đã cố gắng thiết lập nội dung biểu mẫu bằng cách gói' Ajax.Begin'? – wwcdwdcw
Bạn có thể kiểm tra tên của các thuộc tính được gửi đến máy chủ (thông qua Firebug chẳng hạn). Tôi đặt cược rằng các tên tương ứng với chế độ xem một phần của bạn không phù hợp với mô hình ở dạng tên. Vì vậy, mvc không thể để ràng buộc. – Vic