Html.BeginForm - ссылка на объект не установлена ​​для экземпляра объекта - PullRequest
1 голос
/ 21 апреля 2011

У меня есть приложение MVC2 ASP.Net 4, в котором есть страница входа в систему, в которой используется макет с главной страницы приложения.Журнал «по умолчанию» на странице типичен:

                    using (Html.BeginForm("LogIn", "Home", FormMethod.Post, new { id = "LogIn" }))
                    { ....form stuff...}

Теперь мне нужно показать журнал на странице с совершенно другим макетом, но я хочу, чтобы он делал то же самое, что и «по умолчанию»войдите в систему, т. е. вызовите одно и то же действие контроллера и используйте ту же веб-модель.

Они хотят, чтобы пользователи переходили на www.mydomain.com/alternateLogOn.aspx

Итак, я делаюэто в моем global.asax:

  protected void Application_BeginRequest(object sender, EventArgs arg)
  {  if (Request.Url.PathAndQuery.ToLower() == "/AlternateLogOn.aspx")
     {  Context.RewritePath("/Views/Home/AlternateLogOn.aspx");
     }
  }

Это дает мне страницу, которую я хочу показать без макета главной страницы (не включая MasterPageFile =):

<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage<MySite.Web.Models.AccountLogIn>" %>

Страницапрекрасно отображает без использования (Html.BeginForm), но когда я его использую, я получаю исключение Object Reference.

Вот трассировка стека:

Трассировка стека:

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Mvc.Html.FormExtensions.BeginForm(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, FormMethod method, IDictionary`2 htmlAttributes) +42
System.Web.Mvc.Html.FormExtensions.BeginForm(HtmlHelper htmlHelper, String actionName, String controllerName, FormMethod method, Object htmlAttributes) +214
ASP.views_home_alternatelogon_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in d:\Visual Studio 2010\MySite\MySite.Web\Views\Home\AlternateLogon.aspx:32
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +130
System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +84
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5273

Я пытался добавить <%@ Import namespace="System.Web.Mvc.Html" %>, но это не помогает

Спасибо ...

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Вероятно, проще всего поместить форму входа в систему в частичном представлении. Затем создайте две отдельные страницы, каждая из которых вызывает свою главную страницу / макет. На каждой из этих страниц вызовите Html.RenderPartial ("LogonForm").

(Перезапись URL обычно не требуется в MVC. Вместо этого используйте маршруты .)

0 голосов
/ 21 апреля 2011

Здесь произошло одно из двух: либо Html.RouteCollection равно нулю, либо Html.ViewContext равно нулю.

Я не уверен на 100%, но похоже, что ASP.NET обрабатывает этот запрос, а не MVC, поэтому не удалось заполнить эти значения. Это имеет смысл, поскольку вы перенаправляете своего пользователя непосредственно на страницу aspx.

Если все, что вы хотите сделать, это изменить макет страницы, реализовать его как собственное действие / представление и использовать эту перегрузку для View(), которая принимает главную страницу в качестве аргумента.

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