ASP.NET MVC - Html.RenderPartial проблемы - PullRequest
2 голосов
/ 08 марта 2012

У меня есть пользовательский элемент управления с именем "LoginUserControl.ascx", который я поместил на главной странице. Заголовок "LoginUserControl.ascx"

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

Затем я использовал приведенный ниже код для отображения пользовательского контроля на главной странице.

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

При первом запуске загружается страница «index». Обратите внимание на заголовок страницы «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 "регистрация"

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

Так что я просто возвращаю один тип модели, который является "registermodel", можно ли будет вернуть другую модель, такую ​​как "loginmodel", используя список или массив для возврата нескольких моделей в одном представлении.

Ответы [ 3 ]

0 голосов
/ 08 марта 2012

Обратите внимание, что RenderAction и RenderPartial не совпадают.

RenderPartial будет отображать только вид. В то время как RenderAction создаст новый обход MVC, создав новый экземпляр контроллера и т. Д. И вернув результат.

Чтобы решить вашу проблему, вы можете ввести MultiTechnologyWeb.Models.loginmodel, где вы звоните <% Html.RenderPartial("LoginUserControl"); %>. Это будет выглядеть так:

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

Или:

<% Html.RenderPartial("LoginUserControl", Model.LoginModel); %>
0 голосов
/ 08 марта 2012

Если вы не хотите отправлять модель в свой частичный вид, что я хотел сделать в прошлом, вы должны хотя бы кое-что передать методу RenderPartial.

Это был единственный метод, который я смог найти, который позволил мне сейчас пройти модель. Я попытался передать null, и он продолжил передавать родительскую модель

<% Html.RenderPartial("LoginUserControl", new ViewDataDictionary()); %>
0 голосов
/ 08 марта 2012

Вы должны использовать <% Html.RenderAction("Logon","Account"); %> в своей MasterPage вместо RenderPartial, и в этом действии вы просто возвращаете часть логина, которую хотите использовать в заголовке

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

Таким образом, вы можете передать loginmodel в LogInPartial и передать registermodel на страницу регистрации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...