如何将泛型参数传递给局部视图

时间:2012-10-18 18:43:18

标签: c# asp.net-mvc

  

可能重复:
  Generic partial view: how to set a generic class as model?

我正在尝试使用泛型类型构建通用功能,但却遇到了以下情况。

查看模型

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)

2 个答案:

答案 0 :(得分:6)

使用动态模型代替。 您的局部视图可能如下所示:

@model dynamic

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

@Html.EditorFor(o=>myModel.Ticket)
@Html.EditorFor(o=>myModel.Id)
希望这有帮助。

答案 1 :(得分: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)