0

为所有隐藏字段自动生成输入是否真实。我想要这样的扩展方法Html.AutoGenerateHiddenFor(viewmodel)

并输出:

<input type="hidden" name="field1" value="123"  />
<input type="hidden" name="field2" value="1234" />
<input type="hidden" name="field3" value="1235" />
4

2 回答 2

1

您可以使用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 将允许从该后端检索模型。

于 2012-10-09T14:14:39.573 回答
0
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"))
于 2018-01-31T18:48:23.360 回答