3

重複の可能性:
ジェネリック部分ビュー:ジェネリッククラスをモデルとして設定する方法は?

ジェネリック型を使用して共通の機能を構築しようとしていますが、以下のシナリオで行き詰まりました。

モデルを見る

public class DeleteForm<T>  
{
    public LogInfo Ticket { get; set; }
    public string Id { get; set; }

    public DeleteForm() {
      Ticket = new LogInfo();
    }

    public DeleteForm(T viewModel) : this() {
      ViewModel = viewModel;
    }

    public T ViewModel { get; set; }
}

コントローラ

public ActionResult Index(string name)
{
   return View("index", new DeleteForm<List<Users>>(new List<Users>());
}

リスト画面

@model DeleteForm<List<Users>>
//gridview displays list of users
@Html.Partial("revisionwindow", Model)

部分図

@model DeleteForm<T> <---Its not working

@Html.EditorFor(o=>o.Ticket)
@Html.EditorFor(o=>o.Id)
4

2 に答える 2

6

代わりに動的モデルを使用してください。部分ビューは次のようになります。

@model dynamic

 @{
      var myModel = (DeleteForm<List<Users>>) Model;
 }

@Html.EditorFor(o=>myModel.Ticket)
@Html.EditorFor(o=>myModel.Id)

この助けを願っています。

于 2012-10-18T19:07:15.170 に答える
1

モデルを渡して表示する場合は、強く型付けする必要があります(特定の型)。したがって、SomeClass<T>タイプは機能しません。ジェネリック型の代わりに、基本クラスで要件を満たすことができます。私が言いたいのは:モデルを見る

public abstract class Form
{
    public Form()
    {
        Ticket = new LogInfo();
    }
    public LogInfo Ticket {get; set;}
    public int Id {get; set;}
}
public class DeleteUsersForm: Form
{
    public DeleteUsersForm(IEnumerable<Users> users):base()
    {
        this.ViewModel = users;
    }

    public IEnumerable<Users> ViewModel {get; set;}
}

コントローラ

public ActionResult Index(string name)
{
    return View(new DeleteUsersForm(new List<Users>()));
}

リスト画面

@model DeleteUsersForm
//displays list
@Html.Partial("revisionwindow", Model)

部分図

@model Form

@Html.EditorFor(o=>o.Ticket)
@Html.EditorFor(o=>o.Id)
于 2012-10-18T20:00:40.047 に答える