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 回答