c# - 带有显示 html 的对话框部分 View 的 mvc PartialView

标签 c# json asp.net-mvc-3 jquery

我想做的是打开一个 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>

这是 Controller Action :

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

这是 PartialView 的 View :

    @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,但不确定它何时尝试显示部分 View ,它显示的是 HTML 还是呈现的 html。

最佳答案

这里的问题是您正在尝试加载尚未呈现到对话框的 innerHTML 中的 Razor View 。相反,您应该做的是在创建对话框时将对话框的 href 属性设置为 URL.Action 链接。有关示例,请参见下面的链接。

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

另一个选项在 IMO 中不是很容易维护,但可以按照您当前的方式工作,即从操作方法返回原始 HTML。

我认为第一个解决方案更好,因为 Controller 不会被 HTML 字符串连接污染。

关于c# - 带有显示 html 的对话框部分 View 的 mvc PartialView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595310/

相关文章:

c# - WPF 仅访问具有依赖属性的派生类的单个实例

c# - Visual Studio Shell 14 升级破坏了 VSPackage 中的命令捕获

c# - 无法在 View 中使用我的 HtmlHelper

php - 使用 json 和 php 获取 Youtube 视频

javascript - 如何在React js中解析本地JSON文件?

c# - 在 Windows 7 64 位中使用 Winspool.drv 从 Windows XP 32 位更改

jquery - 需要帮助在 JSON/AJAX 帖子上实现 Deferred

asp.net-mvc-3 - ASP.NET MVC 3 解析简单的 html 标记/提取属性值

ASP.NET MVC 3 : Model comes empty in the controller?

javascript - MVC3下如何给JavaScript赋值