Tôi đang gặp sự cố khi mỗi lần tôi đăng biểu mẫu trở lại phiên bản [HttpPost]
của hành động điều khiển của tôi, ModelBinder trả về một đối tượng null. Tôi không thể giải thích tại sao. Nếu tôi thay đổi chữ ký để sử dụng FormCollection
thay vào đó tôi có thể thấy rằng tất cả các phím chính xác đã được đặt. Ai đó có thể giúp tôi pin điểm những gì sai ở đây, bởi vì tôi không thể phát hiện ra nó.ASP.NET MVC Model Binder trả về đối tượng null
Dưới đây là các mô hình để làm việc với quan điểm của tôi
public class DeviceModel
{
public int Id { get; set; }
[Required]
[Display(Name = "Manufacturer")]
public int ManufacturerId { get; set; }
[Required]
[Display(Name = "Model")]
[StringLength(20)]
public string Model { get; set; }
[StringLength(50)]
[Display(Name = "Name")]
public string Name { get; set; }
[StringLength(50)]
[Display(Name = "CodeName")]
public string CodeName { get; set; }
public int? ImageId { get; set; }
}
public class DeviceCreateViewModel : DeviceModel
{
public IEnumerable<SelectListItem> Manufacturers { get; set; }
}
nào tôi sử dụng trong điều khiển của tôi như vậy:
public ActionResult Create()
{
DeviceCreateViewModel viewModel = new DeviceCreateViewModel()
{
Manufacturers = ManufacturerHelper.GetSortedManufacturersDropDownList()
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(DeviceModel model)
{
// if I check model here it is NULL
return View();
}
Và nhìn trông như thế này:
@model TMDM.Models.DeviceCreateViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.ManufacturerId)
</div>
<div class="editor-field">
@Html.DropDownList("ManufacturerId", Model.Manufacturers)
@Html.ValidationMessageFor(model => model.ManufacturerId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Model)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Model)
@Html.ValidationMessageFor(model => model.Model)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CodeName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CodeName)
@Html.ValidationMessageFor(model => model.CodeName)
</div>
<p>
<input type="submit" value="Save" class="medium green awesome" />
@Html.ActionLink("Cancel", "Index", "Device", null, new { @class="medium black awesome" })
</p>
</fieldset> }
Cảm ơn bạn! Nhưng tại sao mô hình tên làm việc cho một bộ điều khiển khác mà tôi có chấp nhận dữ liệu HttpPost? – Chris
Mô hình cho hành động đó cũng có thuộc tính có tên là Mô hình không? Lý do nó thất bại ở đây là do va chạm tên. – counsellorben
OH xin lỗi tôi thực sự hiểu lầm những gì bạn đã nói trước nhưng tôi rõ ràng bây giờ. Cảm ơn bạn đã giúp đỡ. – Chris