【问题标题】:Rendering PartialView to string inconveniences渲染部分视图给字符串带来不便
【发布时间】:2014-07-07 04:25:39
【问题描述】:

我正在开发 ASP.NET MVC5 (Razor) 项目。我想在单击 Test ActionLink 时将部分视图呈现为 DIV,因此 Controller 的代码是这样的:-

public ActionResult Accion(string vista)
{
    if (string.IsNullOrEmpty(vista) || !Request.IsAjaxRequest())
        return View();
    else
    {
            object vistaModelo = null;
            if (vista.Contains("Usuarios"))
                vistaModelo = new UsuariosVistaModelo();
            string render = PartialView(vista, vistaModelo).RenderToString();
            return Json(new { data = render });
    }
}

cshtml代码:-

<div class="menu">
@Html.ActionLink("Test","Accion","Navigation",new { vista = "~/Views/Soporte/Usuarios.cshtml" }, new { @class = "accion" })

   <script>

    //Dispara la acción en el controlador del servidor
    $('.accion').live("click", function () {
        $.ajax({
            url:this.href,
            type:'post',
            success:function(data)
            {
                //data contiene el resultado devuelto por el servidor
                $('.content').html(data);
            },
            error: function (req, status, error) {
                alert(error);
            }
        });
        //Se retorna falso para prevenir reenviar a otra pagina
        return false;
    });

   </script>
</div>

<div class="content">
</div>

当我点击 Test ActionLink 时,$('.accion').live("click" ... 事件没有被触发,直接进入控制器。请需要帮助。谢谢

【问题讨论】:

  • 主要问题 - 在您的源代码视图中,您是否具有类 accion 的属性?我对此表示高度怀疑。另外,我现在不记得正确的语法,但您可以尝试将 onclick 事件嵌入到 @Html.ActionLink 代码中。
  • 是否包含 jquery 库??并且还使用 on live 已弃用
  • 你的控制器也有错误总是返回json为...return Json(new { data = render }, JsonRequestBehavior.AllowGet);

标签: asp.net-mvc html asp.net-mvc-4 c#-4.0 razor


【解决方案1】:

对代码进行一些修改以使其正常工作

** 将您的操作修改为

@Html.ActionLink("Test","Accion","Navigation",new { vista = "~/Views/Soporte/Usuarios.cshtml" }, new { @class = "accion", onclick = "javascript:return false;"  })

现在锚默认行为将不起作用。

** 现在修改你的 Jquery 就像

//Dispara la acción en el controlador del servidor
$('.accion').click(function () {
    $.ajax({
        url:this.href,
        type:'post',
        data : {"vista" : "~/Views/Soporte/Usuarios.cshtml"},
        success:function(data)
        {
            //data contiene el resultado devuelto por el servidor
            $('.content').html(data);
        },
        error: function (req, status, error) {
            alert(error);
        }
    });
    //Se retorna falso para prevenir reenviar a otra pagina
    return false;
});

//在action顶部添加Post

[HttpPost]    
public ActionResult Accion(string vista)
{
if (string.IsNullOrEmpty(vista) || !Request.IsAjaxRequest())
    return View();
else
{
        object vistaModelo = null;

        if (vista.Contains("Usuarios"))
            vistaModelo = new UsuariosVistaModelo();

        string render = PartialView(vista, vistaModelo).RenderToString();
        return Json(new { data = render });
}
}

也可以使用 on/click 代替 live

【讨论】:

    【解决方案2】:

    对 Jquery 级别的一些修改

       // code
            success:function(data)
            {
                $('.content').html(data.data);
            },
            error: function (req, status, error) {
                alert(error);
            }
      //  code
    

    尝试替换 $('.content').html(data);$('.content').html(data.data); 这里第二个 data 是保存控制器值的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2015-11-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多