У меня (или я так думаю!) Простая проблема.
Я значительно упросту свою модель, чтобы ускорить это.
У меня есть класс модели, который можно назвать элементом:
public class Item
{
[Required(ErrorMessage="Must indicate if product is to be tracked by serial number.")]
public bool TrackedBySerial { get; set; }
}
У меня есть представление "Добавить", гдеЯ создаю DropDownList следующим образом:
<%= Html.DropDownListFor(model=>model.TrackedBySerial, new SelectList(new List<object> {null,true,false},null),"Select One") %>
<%= Html.ValidationMessageFor(model => model.TrackedBySerial) %>
Моя проблема заключается в том, что, если я не создаю свое логическое значение в модели для типа NULL, я не могу принудительно установить пустое значение по умолчанию.
Если я использую Html.DropDownList () вместо DropDownListFor (), есть ли способ использовать ModelState.IsValid - или мне нужно также смешать собственную проверку в моем контроллере?
Обновление: Итак, я получил нужную функциональность, она была немного более многословна, чем мне бы хотелось.Есть ли лучший способ сделать это?
Контроллер:
[HttpPost]
public ActionResult Add(InventoryItem newItem)
{
try
{
//get the selected form value
string formVal = Request.Form["TrackBySerial"];
//convert to true, false, or null
bool? selectedValue = TryParseNullable.TryParseNullableBool(formVal);
//if there is no value, add an error
if (!selectedValue.HasValue)
{
ModelState.AddModelError("TrackBySerial", "You must indicate whether or not this part will be tracked by serial number.");
}
else
{//otherwise add it to the model
newItem.TrackedBySerial = selectedValue.Value;
}
if (ModelState.IsValid)
{
//add part into inventory
newItem.ID = inventory.AddNewProduct(newItem).ToString();
//log the action
logger.LogAction(ActionTypes.ProductCatalog, Request.LogonUserIdentity.Name, "Added new product: " + newItem.PartNumber);
//put into QA queue here?
//redirect to edit screen to add suppliers
return RedirectToAction("Edit", new { id = newItem.ID });
}
ViewData["TrackBySerial"] = new SelectList(new object[] { true, false },selectedValue);
return View(newItem);
}}
/// <summary>
/// Form for adding new catalog entries
/// </summary>
/// <returns></returns>
/// GET: /Purchasing/Catalog/Add
public ActionResult Add()
{
InventoryItem newItem = new InventoryItem();
ViewData["TrackBySerial"] = new SelectList(new object[] { true, false });
return View(newItem);
}
просмотр:
<div class="editor-field">
<%=Html.DropDownList("TrackBySerial","- Select One- ") %>
<%=Html.ValidationMessage("TrackBySerial") %>
<%= Html.ValidationMessageFor(model => model.TrackedBySerial) %>
</div>