2011-04-21 2 views
1

MVC2 ASP.Net 4 앱에 응용 프로그램의 마스터 페이지의 레이아웃을 사용하는 로그온 페이지가 있습니다.Html.BeginForm - 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

    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"); 
    } 
    } 

이 나에게 내가 원하는 페이지를 얻는다 제 (Html.BeginForm)를 사용하여 W/O

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

페이지가 표시 좋은,하지만 난 그것을 사용할 때 나는 개체 참조 예외를 얻을 : (MasterPageFile = 제외) 마스터 페이지 레이아웃 O/w를 표시합니다.

스택 추적 : 여기

는 스택 추적의

[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" %>를 추가하는 시도하지만

덕분에 ... 두 가지의

+0

은 조금 혼란 스러워요 - 그것이 MVC 응용 프로그램 인 경우에, 왜 URL의이 .ASPX 확장합니까? –

답변

0

하나가 일어난 도움이되지 않습니다 여기에 Html.RouteCollection이 null이거나 Html.ViewContext이 null입니다.

여기에 100 % 확신 할 수는 없지만 ASP.NET이 MVC가 아니라이 요청을 처리하는 것처럼 보입니다. 따라서이 값을 채우지 못했습니다. 이것은 사용자가 aspx 페이지로 직접 리다이렉트하고 있기 때문에 의미가 있습니다.

페이지의 레이아웃을 변경하고 자신의 동작 /보기로 구현하려면 View()this overload을 사용하고 마스터 페이지를 인수로 사용하십시오.

1

아마도 로그온 양식을 부분보기에 넣는 것이 가장 쉽습니다. 그런 다음 각각 다른 마스터 페이지/레이아웃을 호출하는 두 개의 별개 페이지를 만듭니다. 각 페이지에서 Html.RenderPartial ("LogonForm")을 호출하십시오.

(URL 재 작성은 MVC 일반적으로 불필요 Use routes 대신에..)

+0

이것이 내가가는 방법입니다. 이제 http : // localhost : 8020/Home/AlternateLogOn을 수행 할 수 있습니다.하지만 http : // localhost : 8020/Home/AlternateLogOn을 호출하여이 페이지를로드하라는 사용자의 요청을 어떻게 수용 할 수 있습니까? //localhost:8020/AlternateLogOn.aspx 내 페이지가 내 웹 레이어의보기/홈 폴더에 있습니다. – tom

관련 문제