【问题标题】:ASP.NET MVC - Html.RenderPartial issuesASP.NET MVC - Html.RenderPartial 问题
【发布时间】:2012-03-09 02:41:15
【问题描述】:

我有一个名为“LoginUserControl.ascx”的用户控件,我已将它放在母版页中。 “LoginUserControl.ascx”的头文件

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

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

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

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

<%@ 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>" %>

所以据我了解,模型正在互换,所以任何人都可以帮助我解决这个问题

更多说明......最新

我已经调试过了,我知道在 register 的 actionresult 完成执行后会发生崩溃。 下面的代码用于actionresult“注册”

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

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

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

您应该在 MasterPage 中使用 &lt;% Html.RenderAction("Logon","Account"); %&gt; 而不是使用 RenderPartial,在此操作中您只需返回要在标题中使用的登录部分

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

通过这种方式,您可以将loginmodel 传递给LogInPartial 并将registermodel 传递给注册页面

【讨论】:

  • 我已将代码改为 public ActionResult Logon() { loginmodel model =new loginmodel (); return PartialView("LoginUserControl", model); }
  • 你用Html.RenderAction(...)代替RenderPartial()吗??
【解决方案2】:

请注意,RenderAction 和 RenderPartial 是不一样的。

RenderPartial 将只渲染视图。而 RenderAction 将通过创建控制器等的新实例并返回结果来进行新的 MVC 往返。

要解决您的问题,您可以传入MultiTechnologyWeb.Models.loginmodel,您可以在其中调用&lt;% Html.RenderPartial("LoginUserControl"); %&gt;。它看起来像这样:

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

或者:

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

【讨论】:

  • 我试过你说的但还是不行。我刚刚更新了问题描述......通过“更多解释”行检查......
【解决方案3】:

如果您不想将模型发送到您的局部视图(我过去一直想做),那么您至少必须将一些东西传递给 RenderPartial 方法。

这是我能找到的唯一让我现在必须通过模型的方法。我尝试传递null,它继续传递父模型

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2010-11-03
    相关资源
    最近更新 更多