Мой код создает динамическую форму, основанную на некоторой структуре XML.
Форма может содержать много полей HTML, например
текстовое поле
TextArea
флажки
etc.etc.
После того, как форма будет отображена в формате HTML, пользователи могут заполнить данные.
После того, как пользователь заполнил некоторые значения, я проверяю, находятся ли введенные пользователем значения в правильном формате или нет. в моем контроллере, анализируя коллекцию форм.
Если во введенных данных есть какая-то ошибка, тогда я добавляю ошибки к ModelState
, используя функцию ModelState.AddModelError("f2k0", "This Field is Required");
.
Но когда я возвращаю представление из-за его слабой типизации, у меня нет объекта, который можно вернуть, поэтому обработанная форма теряется, а также значения, заполненные пользователем, теряются.
Я не могу использовать проверку на стороне клиента, поэтому требуется только проверка на стороне сервера.
РЕДАКТИРОВАТЬ - правила, которые я использую для проверки, сохраняются в TempData
.
EDIT2 - это код на мой взгляд
@using (Html.BeginForm("SpecialSurveyCode","Scan",new { codeId = ViewBag.CodeId, scanId = ViewBag.ScanId },FormMethod.Post,null))
{
<fieldset>
@if (Model != null)
{
for (int i = 0; i < Model.Keys.Count; i++)
{
var cntrl = Model[i];
ViewDataDictionary cntrlDataDic = new ViewDataDictionary(); cntrlDataDic.Add("cntrlId",
i); switch (cntrl.ControlType)
{
case ControlTypes.input_text: Html.RenderPartial("_Textbox",cntrl, cntrlDataDic); break;
case ControlTypes.textarea: Html.RenderPartial("_Textarea",cntrl, cntrlDataDic); break;
case ControlTypes.checkbox: Html.RenderPartial("_CheckboxGroup",cntrl, cntrlDataDic); break;
case ControlTypes.radio: Html.RenderPartial("_RadioGroup",cntrl, cntrlDataDic); break;
case ControlTypes.select: Html.RenderPartial("_SelectList",cntrl, cntrlDataDic); break;
}
}
}
</fieldset>
<input type="submit" value="Submit" class="formSubmitButton" />
}
вот модель Dictionary<int,cntrlObject>