Я думаю, что вам лучше всего реализовать привязку пользовательской модели для вашей конкретной модели (MyModel
).То, что вы могли бы получить, выглядит примерно так:
public class MyModel
{
public int Quantity { get; set; }
} // unchanged Model
public class MyViewModel
{
public MyModel myModel { get; set; }
public int QuantityMin { get; set; }
public int QuantityMax { get; set; }
}
Затем вы можете установить эти значения, и в вашей пользовательской привязке модели вы можете сравнить ваше свойство myModel.Quantity
со свойствами QuantityMin
и QuantityMax
.
Пример
Модель :
public class QuantityModel
{
public int Quantity { get; set; }
}
Режим просмотра :
public class QuantityViewModel
{
public QuantityModel quantityModel { get; set; }
public int QuantityMin { get; set; }
public int QuantityMax { get; set; }
}
Связывание пользовательской модели:
public class VarQuantity : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
int MinValue = Convert.ToInt32(bindingContext.ValueProvider.GetValue("QuantityMin").AttemptedValue);
int MaxValue = Convert.ToInt32(bindingContext.ValueProvider.GetValue("QuantityMax").AttemptedValue);
int QuantityValue = Convert.ToInt32(bindingContext.ValueProvider.GetValue("quantityModel.Quantity").AttemptedValue);
if (!(QuantityValue >= MinValue && QuantityValue <= MaxValue))
bindingContext.ModelState.AddModelError("Quantity", "Quantity not between values");
return bindingContext.Model;
}
}
Зарегистрировать пользовательскую модель Binder :
ModelBinders.Binders.Add(typeof(QuantityViewModel), new VarQuantity());
Методы действий контроллера тестирования :
public ActionResult Quantity()
{
return View();
}
[HttpPost]
public string Quantity(QuantityViewModel qvm)
{
if (ModelState.IsValid)
return "Valid!";
else
return "Invalid!";
}
Код пробного просмотра :
@model MvcTest.Models.QuantityViewModel
<h2>Quantity</h2>
@using (Html.BeginForm())
{
@Html.Label("Enter Your Quantity: ")
@Html.TextBoxFor(m => m.quantityModel.Quantity)
<br />
@Html.Label("Quantity Minimum: ")
@Html.TextBoxFor(m => m.QuantityMin)
<br />
@Html.Label("Quantity Maximum: ")
@Html.TextBoxFor(m => m.QuantityMax)
<br /><br />
<input type="submit" value="Submit" />
}