Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Валидация в основном клиентскаят.е. по факту ее нет, т.к. на сервере все проверки должны быть продублированы.
private _dmf - Фабрика моделей данных, получаем из IoC
[HttpGet]
public ActionResult Default(...параметры...)
{
return StandardView(_getFM(...параметры...));
}
[HttpPost]
public ActionResult Default(...параметры.., FormCollection form)
{
var fm = _getFM(...параметры...);
if (fm.Bind(ControllerContext, form)) // разложит данные, разложит ошибки по элементам, добавит сообщения
{
if(_dmf.TryPut(..., fm.Model, fm.Messages) // попытка сохранить, если есть ошибки, то будут положены в fm.Messages
{
return RedirectToAction(...); // Если все Ок
}
}
return StandardView(fm); // Все плохо - выводим все, что есть и смогли разложить
}
private FormModel<TDataModel> _getFM(...параметры...)
{
var dm = _dmf.Get(User, ...параметры...);
var fm = new FormModel<TDataModel>();
fm.Model = dm;
fm.Validate = () => {....}; // <-- комплексная проверка dm
fm.Buttons.Add(...);
// Тут можно изменить элементы fm.Elements[..] - скрыть, показать, проставить обязательность, изменить расположение и т.п.
return fm;
}
result = MvcHtmlString.Create(result.ToString().Replace("/>", "readonly = \"readonly\" />"));
result = html.EditorFor(expression,new { htmlAttributes = new { @readonly = "readonly" }});
html.TextBoxFor(expression, new { @readonly = "readonly" });
@Html.RegistratorEditorFor(model => model.Department, new { @class = "form-control" } )
var member = (expression.Body as MemberExpression).Member;
if (html.ViewData.Model is BaseDocumentModel)
{
if (IsReadOnly(member as PropertyInfo, html.ViewData.Model as BaseDocumentModel))
{
if (htmlAttributes == null)
htmlAttributes = new Dictionary<string, object>();
htmlAttributes.Add("readonly","readonly");
return html.EditorFor(expression,new { htmlAttributes = htmlAttributes });
}
}
return html.EditorFor(expression,htmlAttributes);
Попытка сделать логичное поведение форм редактирования в asp mvc