Bir denetleyici eylemimin [HttpPost]
sürümüne geri her gönderdiğimde, ModelBinder bir null nesnesi döndürdüğü bir sorun yaşıyorum. Nedenini çözemiyorum. İmzayı bir FormCollection
kullanacak şekilde değiştirirsem bunun yerine tüm doğru anahtarların ayarlandığını görebiliyorum. Birisi bana burada neyin yanlış olduğunu göstermeme yardım edebilir, çünkü ben onu göremiyorum. İşte ASP.NET MVC Model Binder, null nesnesini döndürür
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; }
}
ben şöyle benim denetleyicisi kullanmak
ile çalışmak için modeller şunlardır:
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();
}
Ve görünümü şuna benzer:
@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> }
Bu işe yaradı! Ama isim modeli neden HttpPost verilerini kabul eden başka bir denetleyici için çalışıyor? – Chris
Bu eylem için modelin Model adında bir özelliği var mı? Burada başarısız olmasının sebebi isim çarpışmasıydı. – counsellorben
OH Üzgünüm, daha önce söylediklerimi yanlış anladım ama şimdi berrakım. Yardımınız için teşekkürler. – Chris