4

私がやろうとしているのは、jquery ダイアログを開くことです。何が起こっているかというと、PartialView を開こうとすると、次の html テキストとフォームのレンダリングが表示されます。

     <form action="/Plt/FileUpload" method="post"><input data-val="true" data-val-number="The field PlNum must be a number." data-val-required="The PlNum field is required." id="PlNum" name="PlNum" type="hidden" value="36028" />     <div id="errMsg" >

     </div>
     <p>File upload for Pl# 36028</p>
     <input type="file" name="file" />
     <input type="submit" value="OK" />
     </form>

コントローラーのアクションは次のとおりです。

       public ActionResult FileUpload(int id)
       {
         var model = new FileUpload { PlNum = id };
         return PartialView(model);
       }

PartialView のビューは次のようになります。

    @model Ph.Domain.Lb.Models.FileUpload

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    @using (Html.BeginForm("FileUpload", "Plts", FormMethod.Post, null))
    {

      @Html.HiddenFor(a => a.PlNum)

     <div id="errMsg" >
     @if (TempData["ErrMessage"] != null)
     {
       @TempData["ErrMessage"]
     }
     </div>

    <p>File upload for Pl# @Model.PlNum</p>
    <input type="file" name="file" />
    <input type="submit" value="OK" />
   }

これは私のajax呼び出しがどのように見えるかです:

      var url = '@Url.Action("FileUpload", "Plt")' + '?id=' +  encodeURIComponent(rowid);

                 $.ajax({
                           url: url,
                           type: 'GET',
                           success: function(result) {                                    

                if (result.success) {
                  $('#dialog').dialog('close');
                } else {

             // refresh the dialog
                $('#dialog').html(result);
             }
         }  

要約すると、ajax 呼び出しは ActionResult に到達しますが、HTML とレンダリングされた html を示す部分ビューをいつ表示しようとするかはわかりません。

4

2 に答える 2

1

ここでの問題は、ダイアログの innerHTML にレンダリングされていないかみそりビューを読み込もうとしていることです。代わりに、ダイアログを作成するときに、ダイアログの href プロパティを URL.Action リンクに設定する必要があります。例については、以下のリンクを参照してください。

http://www.matthidinger.com/archive/2011/02/22/Progressive-enhancement-tutorial-with-ASP-NET-MVC-3-and-jQuery.aspx

もう 1 つのオプションは、IMO の保守があまり容易ではありませんが、現在行っている方法で動作しますが、アクション メソッドから生の HTML を返すことです。

コントローラーが HTML 文字列連結で汚染されていないため、最初の解決策の方が優れていると思います。

于 2013-01-30T01:58:00.430 に答える
0

jQuery では、 内でスクリプトを使用できません.html()。これは、次の 2 つの方法で行うことができます。

代わりにネイティブ DOM HTML インジェクション:

$('#dialog')[0].innerHTML = result;

.

または、データ属性として設定し、手動でロードします:

ビューで:

     <form action="/Plt/FileUpload" ...
         data-script="@Url.Content("~/Scripts/jquery.validate.min.js")"
           ... />

JS で:

$('#dialog').html(result);
var dialogScript = $('#dialog').children().first().data("script");
if(!!dialogScript) { $.getScript(dialogScript); };

参考:http ://api.jquery.com/jQuery.getScript/

.

別の方法は、次のようにloadメソッドを使用することです。

$("#dialog").load(url, null, function() {
    // on a side note, put $("#dialog") in a variable and reuse it
   $("#dialog").dialog();
});

参考:http ://api.jquery.com/load/

.

jQuery 検証の場合、親ページ自体に追加することを検討します。かなりの数の状況で使用されることが予想されます。

于 2013-01-30T01:58:42.587 に答える