1

ビュー内の非表示フィールドを自動的に作成する方法を探しています。これが私のモデルです:

public class MyViewModel()
{
    public int Id{get;set;}
    [Required]
    public string Name {get;set;
    public ComlexType MyComplexType{get;set;}
    ...
}

ビューでは、すべてのモデルフィールドを列挙する必要があります。

@Html.HiddenFor(m=>m.Id);
@Html.HiddenFor(m=>m.MyComplexType.Title);

...
4

3 に答える 3

1

これを行いたいタイプがたくさんある場合は、おそらくヘルパーとリフレクションが最適です。

これらの数が少ない場合は、必要な非表示を正確に追加するパーシャルを作成する方が簡単かもしれません

@{Html.RenderPartial("HiddenComplexType", Model );}

ComplexType メンバーではなく、モデルを渡す必要があります。おそらく、パーシャルがモデルとして使用できるインターフェイスまたは基本クラスが必要になるでしょう

interface IHasComplexType
{
    ComplexType  GetComplexType();
}

public class MyViewModel : IHasComplexModel
{
    public ComplexType GetComplexType() { return MyComplexType;}
}

他の方法もありますが、リフレクションに入り、ヘルパーはおそらく同じくらい簡単です。

于 2012-07-03T12:23:57.353 に答える
0

次の解決策を実行しました。「ReflectionHelper」クラスはモデルのプロパティを反映し、「properties」変数にはモデルフィールド{{'Id'、1}、{'Name'、'Myname'}など}があります。

public static class ReflectionHelper
{
    public static void IterateProps(Object obj, string baseProperty, ref Dictionary<string,object> properties )
    {
        if (obj != null)
        {
            var baseType = obj.GetType();
            var props = baseType.GetProperties();
            foreach (var property in props)
            {
                var name = property.Name;
                var propType = property.PropertyType;
                if (propType.IsClass && propType.Name != "String")
                {
                    IterateProps(property.GetValue(obj, null), baseProperty + "." + property.Name, ref properties);
                }
                else
                {
                    properties.Add(baseProperty + "." + name, property.GetValue(obj, null));
                }
            }
        }
    }
}

そして、私は次のことを考えています。

@using (Html.BeginForm("MyStep1", "Wizard"))
{
    var properties = new Dictionary<string, object>();
    ReflectionHelper.IterateProps(Model, Model.GetType().Name,ref properties);
    foreach (var property in properties)
    {
        <input type="hidden" name="@property.Key" value="@property.Value"/>
    }
}

これはウィザードソリューションの一部です。後でMVCでウィザードに関する記事を書く予定ですが、誰かが役立つかもしれません。

于 2012-07-04T10:08:50.720 に答える
0

ビューでは、次を使用できます。

@Html.EditorForModel()

モデルに HiddenInput 属性を追加できます。

public class MyViewModel()
{
    [HiddenInput(DisplayValue = false)]
    public int Id{get;set;}
    [Required]
    public string Name {get;set;
    public ComlexType MyComplexType{get;set;}
    ...
}
于 2012-07-03T18:58:18.503 に答える