asp.net-mvc
  • asp.net-mvc-3
  • razor
  • 2011-02-03 20 views 13 likes 
    13

    私はこれをうまく動作させることができませんでした。私はこのpartialViewをレンダリングASP.net MVC3 - Ajaxポストバックを使用した面倒なビューとPartialView

    @model Project.Models.Account.ForgotPasswordModel 
    
    @{ 
        ViewBag.Title = "Forgot Password"; 
    } 
    
    <h2>ForgotPassword</h2> 
    
    <span id='@ViewBag.ReplaceID'> 
        @Html.Partial("_ForgotPasswordUserNameAjax", ViewData.Model) 
    </span> 
    

    ビューで

    ... ...

    @model Project.Models.Account.ForgotPasswordModel 
    
    @{ 
        this.Layout = null; 
    } 
    
    @using (Ajax.BeginForm("ForgotPassword", new AjaxOptions() { UpdateTargetId = ViewBag.ReplaceID, InsertionMode = InsertionMode.InsertAfter })) 
    { 
        @Html.ValidationSummary(true, "Forgot Password was unsuccessful. Please correct the errors and try again.") 
        <div id="login" class="box"> 
          <fieldset> 
          <h2>Account Information</h2> 
          <div class="inside"> 
           <div class="editor-label"> 
            @Html.LabelFor(m => m.Username) 
           </div> 
           <div class="editor-field"> 
            @Html.TextBoxFor(m => m.Username) 
            <br /> 
            @Html.ValidationMessageFor(m => m.Username) 
            <br /> 
           </div> 
    
           <p> 
            <input type="submit" value='Submit' /> 
           </p> 
          </div> 
         </fieldset> 
        </div> 
    } 
    

    そして、このコントローラのアクション...

    [HttpPost] 
         public PartialViewResult ForgotPassword(ForgotPasswordModel model) 
         { 
    
          if (String.IsNullOrEmpty(model.Username)) 
          { 
           ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_REQUIRED); 
          } 
          else 
          { 
           bool isGood = false; 
           model.Question = this._security.ValidateUserNameGetSecurityQuestion(model.Username, out isGood); 
    
           if (!isGood) 
           { 
            ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_INVALID); 
           } 
    
          } 
          PartialViewResult retVal = null; 
          if (ModelState.IsValid) 
          { 
    
           retVal = PartialView("ForgotPasswordAnswerAjax", model); 
          } 
          else 
          { 
           retVal = PartialView("_ForgotPasswordUserNameAjax", model); 
          } 
    
          return retVal; 
    
         } 
    

    しかし、毎回、ビューにはレイアウトに含まれていないPartialViewのみが返されます(PartialViewは画面に表示されます)。私がオンライン見つけたEWの事... http://www.compiledthoughts.com/2011/01/aspnet-mvc-razor-partial-views-with.html http://stackoverflow.com/questions/4655365/mvc3-submit-ajax-form

    しかし、何もこの問題を修正していません。私は変更なしですべての値にInsertionModeを変更しました。 @ Html.Partialをコードブロックに変更しました。 @ { Html.RenderPartial( "_ ForgotPasswordUserNameAjax"、ViewData.Model); }。動作しません

    ...

    私はアイデア(と忍耐)が不足しています!

    助けてください!

    答えて

    8

    EDIT PEBKAC。

    プロジェクトをアップグレードしたときに忘れてしまった新しいjquery.unobtrusive-ajax.jsファイルが追加されましたが、_Layout.cshtmlページには含められませんでした。ライブラリに問題を修正しました。ごめんなさい!

    オリジナル投稿 私はこれがバグだと考え始めました。変換されていないプロジェクト(MVC2)をもう一度MVC3に変換します。元のページをすべてaspx/ascx形式で残して、プロジェクトを実行しました。私はそのページを試しました。同じ問題がまだ発生します。 MVC2に戻り、正常に動作します。 MVC3をもう一度試してみると、問題は再び起こります。

    あなたが処理されることを、すべての場合にのみ部分図を、戻ってきているので、私は...これと非常によく似ページを使用して

    http://mattsieker.com/index.php/2010/11/21/converting-asp-net-mvc2-project-to-mvc3/

    0

    「メイン」ビューは、パーシャルビューと同様にForgotPasswordとも呼ばれます。

    コントローラはPartialViewResultのみを返すので、レイアウトは使用されません。

    親ビューとajax呼び出しで異なるアクションを作成します。

    +0

    をまあ、私はカミソリの上でビューを変更することに加えて、MVC3にMVC2アプリケーションからこのプロジェクトを変換しています。これらはMVC3に切り替える前に完全に正常に機能しました。私はコントローラーコードを変更する必要がないことを期待していました(アンダースコアでビューの新しい命名を除いて)。 :( – DavidAndroidDev

    1

    プロジェクトを変換します。この機能は、Razorビューが処理される方法のため、MVC3ではより厳密に守られています。

    は、単純に次のようにあなたのコントローラのアクションを変更します。

    [HttpPost] 
         public ActionResult ForgotPassword(ForgotPasswordModel model) 
         { 
    
          if (String.IsNullOrEmpty(model.Username)) 
          { 
           ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_REQUIRED); 
          } 
          else 
          { 
           bool isGood = false; 
           model.Question = this._security.ValidateUserNameGetSecurityQuestion(model.Username, out isGood); 
    
           if (!isGood) 
           { 
            ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_INVALID); 
           } 
    
          } 
          PartialViewResult retVal = null; 
          if (ModelState.IsValid) 
          { 
    
           retVal = View("ForgotPasswordAnswerAjax", model); 
          } 
          else 
          { 
           retVal = PartialView("_ForgotPasswordUserNameAjax", model); 
          } 
    
          return retVal; 
    
         } 
    
    +0

    これは、より多くの書式設定を網羅していますが、私は部分ビューの親ビューからすべてを完全に見逃しています。パーシャルビュー??パーシャルビューはどのようなものですか? – DavidAndroidDev

    関連する問題