をここでは純粋なMVCクラスを使用して、任意のスクリプトをハードまたはjQueryのを使用する必要はありません代替答えがあります。最初に、MVC 2のバリデーターは、成功、失敗、および確認のために問題なく動作することがわかりました。
1)必要なMVCスクリプトを含めます(3つの合計プラスEnableClientSideValidation呼び出し - MSDNを参照)。
2)モデル/データエンティティにMetadataClassAttributeとRequiredAttribtuesを挿入します。別のメタデータクラスを作成してモデルを部分的にする必要はありません(そのパンツは、同じモデルクラスを属性内で参照するだけです)。
3))は、既に提案されているようJavaScriptを返すことによって、問題をリダイレクトする(しかし、jQueryの指向の方法でAJAXを解く...
それは既ににリストページからリダイレクトに失敗したとき、私は唯一の検証中に奇妙な行動を負いました詳細/編集ページ。エラーメッセージは数秒間表示され、消えます!もちろん、ページのシェルが最初のリストページであり、編集ページの内部コンテンツだったので、混乱しました。したがって、問題の根本原因は、デフォルトのMVC 2ツールキットが最初のページから正しくリダイレクトできず、2番目のページで正しく動作していないことではありませんでした。
私はここで同じ解決策を見つけた:
http://craftycodeblog.com/2010/05/15/asp-net-mvc-ajax-redirect/ ...私はVBで拡張メソッドやクラスに拡大しています。NET:
''' <summary>
''' MVC extension methods.
''' </summary>
Public Module MvcExtensions
''' <summary>
''' Returns an <see cref="AjaxAwareRedirectResult"/> for the specified action
''' and optional controller name.
''' </summary>
<Extension()> _
Public Function AjaxAwareRedirectToAction(controller As Controller, _
actionName As String, _
Optional controllerName As String = Nothing) _
As RedirectResult
' Get target URL
Dim url = controller.Url.Action(actionName, controllerName)
' Return AJAX aware redirect result
Return New AjaxAwareRedirectResult(url)
End Function
End Module
''' <summary>
''' <see cref="RedirectResult"/> which works with MVC 2 AJAX.
''' </summary>
''' <remarks>
''' Normal redirects do not work with AJAX partial updates in MVC (HTTP 302 status).
''' With MVC 2 AJAX it is necessary to return JavaScript to change the browser location.
''' </remarks>
Public Class AjaxAwareRedirectResult
Inherits RedirectResult
''' <summary>
''' Creates an instance which redirects to the specified URL using
''' a response containing either AJAX JavaScript or classic HTTPS 302 status.
''' </summary>
''' <param name="url">Target URL.</param>
Sub New(url As String)
MyBase.New(url)
End Sub
''' <summary>
''' Generates the response.
''' </summary>
Public Overrides Sub ExecuteResult(ByVal context As ControllerContext)
' Check if AJAX was used for request
If context.RequestContext.HttpContext.Request.IsAjaxRequest Then
' Perform JavaScript redirect when AJAX is used
Dim destinationUrl As String = UrlHelper.GenerateContentUrl(Url, context.HttpContext)
Dim result As JavaScriptResult = New JavaScriptResult With {
.Script = ("window.location='" + destinationUrl + "';")}
result.ExecuteResult(context)
Else
' Perform classic HTTP 302 status redirect
MyBase.ExecuteResult(context)
End If
End Sub
End Class
次に、2つのオプションがあります。 MVCターゲットのAjaxAwareRedirectToAction(aciton、[controller])を呼び出す典型的なMVCパターンに従うか、特定のURLターゲット(つまり外部サイト)を念頭に置いたときにAjaxAwareRedirectResult(url)の新しいインスタンスを返すことができます。
Microsoftが最初のMVC 2 RTMで並べ替えたAJAXリダイレクトを取得しなかったのは本当に驚いていました。私は現在のプロジェクトでMVC 2を使用しなければなりません。なぜなら、この制限に苦しんでいるだけでなく、新しいMVCソリューションをいくつか持っていて、検証のためにjQueryにもっと傾いているからです。私は彼らがそれを修正するとすぐにわかります。
私も同様の状況です。私は記入するフォームを含むページを持っています。ページ上のボタンは1つのフィールドからデータを取り出し、関連するデータを検索するためのWebサービスを呼び出し、検索が成功した場合は別のページにリダイレクトします。検証済みのフィールドはボタンのルックアップ操作には適用できないため、Ajaxを使用してデータ検証をバイパスします。ルックアップに失敗した場合は、同じページにエラーを表示する必要があります。少なくともそれが私にしてほしいことです。 – Suncat2000