可能重复:
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)
答案 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)