通过MVC中的Jquery将视图名称传递给PartialViewResult

时间:2019-01-02 07:20:00

标签: jquery model-view-controller

我需要通过Jquery,单个Controller和单个PartialViewResult方法将Views名称传递给PartialViewResult才能使用整个应用程序,

  

工作控制器代码:-

    public PartialViewResult addNew(string MenuId)
    {
        return PartialView(@"~/Views/Test/Add.cshtml");
    }
  

html jquery方法:-

  $('#btn_add').click(function (e) {
      window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1;
  });

此代码工作正常,但是为什么我们应该在控制器中添加视图名称而不是通过jquery方法传递视图名称,这将非常易于维护,并且代码的方法也非常简单

  

预期输出:   控制器代码:-

    public PartialViewResult addNew(string MenuId, string ViewNames)
    {
        return PartialView("@~/"+ ViewNames);

        //return PartialView(@"~/Views/Test/Add.cshtml");
    }
  

预期输出:   html jquery方法:-

  $('#btn_add').click(function (e) {
      window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&viewname=' + 'Views/Test/Add.cshtml';

  });

上面的代码显示处理您的请求时发生错误。谁能分享您的想法?..

  

我需要使用MVC Controller中的单个PartialViewResult方法从jquery方法传递视图名称

1 个答案:

答案 0 :(得分:0)

这里的实际问题是,您在不使用percent encoding的情况下将斜杠作为查询字符串值进行传递,如下面的重定向代码所示:

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&viewname=' + 'Views/Test/Add.cshtml';

以上示例生成的URL如下所示,它不是有效的URL,因为斜杠是URL字符串中的保留字符,因此显示“ 在处理您的请求时发生错误”消息:

/Home/addNew?MenuId=1&viewName=Views/Test/Add.cshtml => invalid trailing slashes

要解决此问题,必须放置@Url.Encode()帮助器,以使斜杠编码为%2f

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&ViewNames=' + '@Url.Encode("Views/Test/Add.cshtml")';

生成URL编码的查询字符串:

/Home/addNew?MenuId=1&ViewNames=Views%2fTest%2fAdd.cshtml => valid

如果要从服务器端变量/ viewmodel字符串属性传递URL,请确保首先对作为查询字符串传递的所有特殊字符进行编码:

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + @MenuId + '&ViewNames=' + '@Url.Encode(ViewName)';

但是,如果您要从同一文件夹加载部分视图,则最好将文件路径包含在action方法内,并且只传递不带扩展名的viewname,从而避免使用Url.Encode()

public ViewResult addNew(string MenuId, string ViewNames)
{
    return View(@"~/Views/Test/" + ViewNames + ".cshtml");
}

注释:

1)window.location.href将重新加载整个页面,您必须使用ViewResult来重新加载。如果要刷新部分视图而不重新加载整个页面,请改用AJAX回调。

$('#btn_add').click(function (e) {
    $.ajax({
        url: '@Url.Action("addNew", "Home")',
        type: 'GET',
        data: { MenuId: 1, ViewNames: '@Url.Encode("Views/Test/Add.cshtml")' },
        success: function (result) {
            $('#targetElement').html(result);
        },
        error: function (xhr, status, err) {
            // error handling
        }
    });
});

2)操作方法参数能够识别百分比编码字符并将其还原为原始字符串。

相关问题:

Characters allowed in a URL