我需要通过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方法传递视图名称
答案 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)操作方法参数能够识别百分比编码字符并将其还原为原始字符串。
相关问题: