如何在MVC 2视图中包含用户控件和模型?

时间:2011-03-18 04:59:11

标签: c# asp.net-mvc asp.net-mvc-2

我有UserControl以及特定视图的模型。 Usercontrol正在正常工作,同时我尝试在与模型相同的视图中包含radiobutton。我收到错误:“传入字典的模型项是'System.Data.DataTable'类型,但这个字典需要一个类型为”MyModelName“的模型项。”

所以,请你帮助任何人。

感谢, 莫汉

1 个答案:

答案 0 :(得分:0)

异常消息非常具有描述性,并且说明了一切。您的视图接受不同的模型,并且您在控制器中将不同的模型传递给此视图。 看看两个地方

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 

Inherits="System.Web.Mvc.ViewPage<AcceptedModel>" %>

并且在你的控制器中你会有像

这样的东西
public ActionResult action()
{
    SentModel model = new SentModel(); 
    return View(SentModel); //i believe typeof(SentModel) != typeof(AcceptedModel) that is what is causing problem
}

编辑您可以使用可包含视图所需的所有值的viewModel

public class MYViewModel
{
    System.Data.DataTable MyTable{get;set;}
    Registration Myregistration{get;set;}
}

现在在控制器中,您可以像

一样填充viewModel
public ActionResult MyActionResult(int id)
{
   MyViewModel mdl = new MyViewModel();
   mdl.Myregistration = new Registration();
   mdl.MyTable = //code to populate table
   return View(mdl);
}

在视图中,您应该将其更新为接受MyViewModel类型

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 

Inherits="System.Web.Mvc.ViewPage<MyViewModel>" %>

然后您可以使用

在视图中访问它们
<%foreach( var row in Model.MyTable){}%>
and <%:Model.MyRegistration.FirstName%>