2011-08-04 88 views
1

我中都有登錄局部視圖中的AccountController:MVC3部分視圖回發不工作?

public ActionResult LogOn() 
    { 
     return PartialView(); 
    } 

    // 
    // POST: /Account/LogOn 

    [HttpPost] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (ModelState.IsValid) 
      { 
       if (MembershipService.ValidateUser(model.UserName, model.Password)) 
       { 
        FormsService.SignIn(model.UserName, model.RememberMe); 
       } 
       else 
       { 
        ModelState.AddModelError("", Resources.Account.Account.LoginFailureText); 
       } 
      } 
     } 

     return PartialView(model); 
    } 

,我使這個部分我_Layout.cshtml有:

@{Html.RenderAction("LogOn", "Account");} 

和LogOn.cshtml的看法是:

@model Kalimat.Web.Models.LogOnModel 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<div class="leftbanner login"> 
    <div class="bookicon"> 
     <img src="@Url.Content(@Kalimat.Web.Resources.Common.bookiconImgSrc)" alt="@Kalimat.Web.Resources.Common.bookiconImgAlt" /> 
    </div> 
    <div class="strip"> 
     @MvcHtmlString.Create(Kalimat.Web.Resources.Account.Account.LoginTitle) 
    </div> 
    <div class="shade_2"> 
     <img src="@Url.Content(@Kalimat.Web.Resources.Common.shade_2ImgSrc)" alt="@Kalimat.Web.Resources.Common.shade_2ImgAlt" /> 
    </div> 
    <div class="insidetext"> 
     @{ 
      //Logined user view 
      if (Request.IsAuthenticated) 
      { 
       <div id="LoginView1"> 
        @{<text>@Kalimat.Web.Resources.Account.Account.WelcomeText <strong>@Model.UserName</strong>!</text>} 
        <br /> 
        <a id="LoginStatus1" href="">@Kalimat.Web.Resources.Account.Account.LoginStatusText</a> 
        <a id="ChangePassLinkButton" href="">@Kalimat.Web.Resources.Account.Account.ChangePswText</a> 
       </div> 
      } 
      else 
      { 
       @Html.LabelFor(m => m.UserName) 
       @Html.TextBoxFor(m => m.UserName, new { @class = "inputfield" }) 
       @Html.ValidationMessageFor(m => m.UserName, "*") 
       <br /> 
       @Html.LabelFor(m => m.Password) 
       @Html.PasswordFor(m => m.Password, new { @class = "inputfield" }) 
       @Html.ValidationMessageFor(m => m.Password, "*") 
       <br /> 
       <span class="remove_shop"> 
        @Html.CheckBoxFor(m => m.RememberMe) 
        @Html.LabelFor(m => m.RememberMe) 
       </span> 
       <p> 
        ***<input type="submit" class="submit_Cart" value="@Kalimat.Web.Resources.Account.Account.LoginButtonText" />*** 
       </p> 
       @Html.ValidationSummary(false, Kalimat.Web.Resources.Account.Account.LoginFailureText) 
       <a class="submit_Cart" href="">@Kalimat.Web.Resources.Account.Account.NewAccountText</a> 
       <br /> 
       <a class="submit_Cart" href="">@Kalimat.Web.Resources.Account.Account.RecoverPswText</a> 
      } 
     } 
    </div> 
</div> 

當我運行應用程序LogOn視圖渲染正確,但當點擊提交按鈕時什麼也沒有發生。爲什麼?

回答

4

第一站複製此行

if (ModelState.IsValid) {} 

沒有意義......

通過尋找你的代碼,你必須提交按鈕,一切,但我認爲你缺少

@using(Ajax.BeginForm()) 
{ 
    //put all your html element in this 
    // and also put submit button in it ... 
} 

這裏是Ajax.BeginForm()的參數:

Ajax.BeginForm(
    string "ActionName", 
    string "ControllerName", 
    new routevalues {id="IDValue",message="MyMessage"}, 
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] }, 
    new { id = "FormName" } 
) 

這是因爲您使用ajax發佈您的操作...

+0

感謝您的回答,但是在使用此解決方案時,首次查看與驗證錯誤一起顯示,並提交視圖時,它不呈現以反映用戶登錄,直到刷新頁面 –

+0

您使用的是 Html.EnableClientValidation();在ajax.beginform()之前的 ?並在你的行動,當你履行所有的檢查,如用戶驗證,那麼你不必呈現相同的HTML ...因爲您已經使用過表單,因此在控件上創建另一個使用相同模型的div,但表示用戶已登錄或在此處添加UpdateTargetId屬性: 新的AjaxOptions {UpdateTargetId = [divid],OnBegin = [someFunction],OnFailure = [failureFunction]} 所以當行動是成功的,它會顯示這個div而不是那個......但它完全取決於你如何管理你所呈現的html ... –

+1

chk this out http://stackoverflow.com/questions/5733541/rendering-view-in-asp-net-mvc –

0

我看不到你是否在表單中提交?

你應該加入:

@using(Html.BeginForm("Logon", "Account")) 
{ 
    // Submit form bits here 
} 

在你登錄位提交的信息?

+0

盧克,第一次感謝您的回答,第二次工作,但我有新問題(1)LogOn視圖顯示與驗證錯誤seconed當我按提交視圖沒有改變,以反映用戶登錄,直到刷新頁!!?? –

+1

你有沒有試過dvlpr的建議?我的錯不知道你是在跑偏。它可能更適合您的使用?至於'Request.IsAuthenticated'考慮一下...你已經提交回頁面並且狀態將是false,僅僅因爲你在調用'FormService'的過程中並沒有使Request.IsAuthenticated變爲true 。我會在'Model'或'ViewBag'屬性中設置一些內容,以表明您已經登錄。 –

+0

感謝Luke,我使用ViewBag,現在運行的應用程序 –

-1

請檢查您是否在窗體中添加了任何隱藏字段,該字段爲空。簡而言之,應該沒有什麼不需要將它作爲null來發布和發佈。

例如,我正在發佈帶有ID(主鍵)隱藏字段的表單(用於創建),因此在創建實例中Id將爲空,因此模型處於有效狀態,並且它看起來像任何不發佈的東西。

+0

你想介紹一下你的句子嗎?想要達到你想要通過的想法很難。 – Rubens