2012-03-08 79 views
2

我有一个名为“LoginUserControl.ascx”的用户控件,我已经放置在母版页中。 头“LoginUserControl.ascx”的ASP.NET MVC - Html.RenderPartial问题

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MultiTechnologyWeb.Models.loginmodel>" %> 

然后我用下面的代码来显示在母版用户控件。

<% Html.RenderPartial("LoginUserControl"); %> 

第一次运行页面“index”被加载。 注意“索引”页面的标题,没有指定模型。因此页面加载成功

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MT.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

现在我点击链接打开register.aspx。我得到了下面的错误

传入字典的模型项目类型为'MultiTechnologyWeb.Models.registermodel',但该字典需要'MultiTechnologyWeb.Models.loginmodel'类型的模型项目。

“register.aspx”页面

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MT.Master" Inherits="System.Web.Mvc.ViewPage<MultiTechnologyWeb.Models.registermodel>" %> 

所以我的理解模型的头被互换,因此任何人都可以请帮我如何解决这个问题

更多的解释。 ............ 最新

我有调试,我知道在actionresult注册后发生崩溃是f被执行。下面 代码是ActionResult的“注册”

public ActionResult register() 
    { 
     registermodel model; 
     //some code here 
    return View("register",model); 
    } 

所以我只是一个返回类型的模型,即“registermodel”的,有没有可能通过使用一个列表,或返回另一个模型,如“loginmodel”数组在同一视图中返回多个模型。

+0

http://stackoverflow.com/questions/5763631/multiple-model-in-a-single-view-mvc3 – Kevin 2012-03-10 08:26:14

回答

0

你应该在你的母版使用<% Html.RenderAction("Logon","Account"); %>而不是使用的RenderPartial,并在这个动作你可以返回登录部分要在头

public ActionResult Logon(){ 
// do your stuff 
return PartialView("LoginUserControl"); 
} 

使用通过这种方式,你可以通过loginmodel到LogInPartial并通过registermodel到注册页面

+0

我都试过了,没有关系似乎无法解决问题。 – Kevin 2012-03-08 12:10:59

+0

我已更改为公共ActionResult登录代码() { loginmodel model = new loginmodel(); return PartialView(“LoginUserControl”,model); } – Kevin 2012-03-08 12:11:38

+0

是否使用'Html.RenderAction(...)'而不是'RenderPartial()'? – 2012-03-08 12:51:27

0

请注意RenderAction和RenderPartial不一样。

RenderPartial将只呈现视图。虽然RenderAction将创建一个新的MVC往返,通过创建控制器的新实例等并返回结果。

要解决您的问题,您可以通过拨打<% Html.RenderPartial("LoginUserControl"); %>MultiTechnologyWeb.Models.loginmodel。它应该是这样的:

<% Html.RenderPartial("LoginUserControl", new MultiTechnologyWeb.Models.loginmodel()); %> 

或者:

<% Html.RenderPartial("LoginUserControl", Model.LoginModel); %> 
+0

我尝试了你所说的,但仍然无法正常工作。我刚刚更新了问题描述.......按行查看“更多解释”............. – Kevin 2012-03-08 16:08:08

+0

您能否提供有关错误的更多详细信息? – 2012-03-13 09:41:06

0

如果你不想要的模型发送到您的局部视图,这是我一直想过去的事,你做至少必须传递一些信息给RenderPartial方法。

这是我能找到的唯一方法,它允许我现在必须通过一个模型。我试图通过null,并继续通过父模型

<% Html.RenderPartial("LoginUserControl", new ViewDataDictionary()); %>