我有一個註冊頁面,它向用戶請求一些數據,例如,電子郵件地址。管理員應該能夠自定義表單。例如,他可能對用戶的出生地感興趣,在這種情況下,註冊表中應該出現一個額外的文本框。將驗證器的輸入控件動態添加到視圖
由於表單中的字段非常動態,因此我無法將這些屬性添加到視圖模型中。在運行時如何將輸入控件和驗證器添加到視圖中?
我有一個註冊頁面,它向用戶請求一些數據,例如,電子郵件地址。管理員應該能夠自定義表單。例如,他可能對用戶的出生地感興趣,在這種情況下,註冊表中應該出現一個額外的文本框。將驗證器的輸入控件動態添加到視圖
由於表單中的字段非常動態,因此我無法將這些屬性添加到視圖模型中。在運行時如何將輸入控件和驗證器添加到視圖中?
您可以使用集合爲動態表單創建模型類。例如:
public class MyParam {
public string Name {get; set;}
public string Value{get; set;}
}
public class MyDynamicForm {
public List<MyParam> parameters {get; set;}
}
比你可以創建一個視圖,在參數上使用循環構建窗體。爲了驗證輸入參數,您需要開發一種驗證方法,輸入FormCollection
,並通過Name
驗證每個參數。
我認爲通過我的自定義屬性,我環路和呼籲的HtmlHelper擴展方法來呈現HTML:
我在下面低於最優的方式解決了這個
foreach (var attribute in group.Attributes)
{
<tr>
<td>
@attribute.Name
</td>
<td>
@Html.ValidationMessage(attribute.Id)
@Html.AttributeEditor(attribute)
</td>
</tr>
}
在AttributeEditor()方法,我設置不顯眼的JavaScript驗證屬性,以使客戶端驗證:
if (IsRequired)
{
attributes["data-val-required"] = MvcCompaniesResources.UserProfileValidatorMessages.RequiredField;
attributes["data-val"] = "true";
}
這使客戶端驗證,一個d適用於@Html.ValidationMessage()
。不過,我仍然需要分別實現服務器端驗證。
[用於動態視圖數據/窗體的ASP.Net MVC編輯器模板](http://stackoverflow.com/questions/7403799/asp-net-mvc-editor-template-for-dynamic-view-data-forms) – Sjoerd
[ASP.NET MVC自定義ModelMetadataProvider和ModelValidatorProvider](http://stackoverflow.com/questions/4602339/asp-net-mvc-custom-modelmetadataprovider-and-modelvalidatorprovider) – Sjoerd
[使用Mono編譯器的動態ASP.NET MVC 3模型作爲服務](http://weblogs.asp.net/jgalloway/archive/2011/05/26/dynamic-asp-net-mvc-3-models-using-mono-s-compiler-as-a-service的.aspx) – Sjoerd