MVC PartialView with Dialog Partial View显示HTML。

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调用代码:

这是我的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。
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

另一种选择是从动作方法返回原始HTML,但在我看来这种方式不太可维护。我认为第一种解决方案更好,因为控制器没有被HTML字符串串联所污染。

0

jQuery不允许您在.html()中使用脚本。您可以通过两种方式实现此目的:

使用本地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验证的情况下,我会考虑将其添加到父页面本身。您预计它将在相当多的情况下使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接