为所有隐藏字段自动生成输入是否真实。我想要这样的扩展方法Html.AutoGenerateHiddenFor(viewmodel)
并输出:
<input type="hidden" name="field1" value="123" />
<input type="hidden" name="field2" value="1234" />
<input type="hidden" name="field3" value="1235" />
为所有隐藏字段自动生成输入是否真实。我想要这样的扩展方法Html.AutoGenerateHiddenFor(viewmodel)
并输出:
<input type="hidden" name="field1" value="123" />
<input type="hidden" name="field2" value="1234" />
<input type="hidden" name="field3" value="1235" />
您可以使用MvcContrib 的 Html.Serialize
方法:
@using (Html.BeginForm())
{
@Html.Serialize(Model)
<button type="submit">OK</button>
}
然后在接收回发的控制器操作中:
[HttpPost]
public ActionResult SomeAction([Deserialize] MyViewModel model)
{
...
}
它使用经典的 WebForms 的 ViewState 来序列化模型并发出一个隐藏的输入字段,该字段将包含序列化的模型。它有点模仿传统的 ViewState。
另一种解决方案是将您的模型保存到您的后端,然后在您的表单中简单地使用一个隐藏的输入字段,其中包含一个唯一的 ID,该 ID 将允许从该后端检索模型。
public class ModelToPersistBetweenFormSubmits()
{
public string field1 { get; set;}
public string field2 { get; set;}
public string field3 { get; set;}
public string field4 { get; set;}
public string GetHiddenFields(string excludeFields = "")
{
string[] excludeFieldList = excludeFields.Split(',');
string val = string.Empty;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (System.Reflection.PropertyInfo property in this.GetType().GetProperties())
{
if (excludeFieldList.Contains(property.Name))
{
continue;
}
else if (property.GetIndexParameters().Length > 0)
{
val = string.Empty; //sb.Append("Indexed Property cannot be used");
}
else
{
val = (property.GetValue(this, null) ?? "").ToString();
}
sb.Append(string.Format("<input type='hidden' id='{0}' name='{0}' value='{1}'/>", property.Name, val));
sb.Append(System.Environment.NewLine);
}
return sb.ToString();
}
}
//render hidden fields except for current inputs
@Html.Raw(Model.GetHiddenFields("field4,field3"))