ASP.Net MVC Ajax.BeginForm OnComplete在Razor视图中传递c#参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.Net MVC Ajax.BeginForm OnComplete在Razor视图中传递c#参数相关的知识,希望对你有一定的参考价值。
我在MVC c#Razor视图中有以下代码:
@{string url = "/Projects/_MonthRangesScriptsPartial";}
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new { id = ViewBag.InputResourceID },
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = "updategraphArrayScript(@url,@ViewBag.InputResourceID)"
}))
代码几乎完美地工作,但我想将C#变量解析为OnComplete行中的值。
也就是说,Razor engin应该将代码解析为(例如):
<form action="/Projects/_MonthRanges/55"
data-ajax="true" data-ajax-complete="updategraphArrayScript(/Projects/assets,55)"
...>
而不是:
<form action="/Projects/_MonthRanges/55"
data-ajax="true" data-ajax-complete="updategraphArrayScript(@url,@ViewBag.InputResourceID)"
...>
答案
只需创建另一个变量字符串
@{
string url = "/Projects/_MonthRangesScriptsPartial";
string onComplete = String.Format("updategraphArrayScript({0}, {1})", url, ViewBag.InputResourceID);
}
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new { id = ViewBag.InputResourceID },
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = @onComplete
}))
另一答案
在分配OnComplete值时取消@。您不需要它,因为您已经在服务器端代码的上下文中。
@
用于将html渲染上下文切换到服务器端代码,<text></text>
用于从服务器端上下文切换到html渲染。在上面给出的示例中,您已经在BeginForm()
方法的服务器端代码上下文中,因此不需要@。你没有将onComplete
的值写入页面,BeginForm()
将处理所有这些。
以上是关于ASP.Net MVC Ajax.BeginForm OnComplete在Razor视图中传递c#参数的主要内容,如果未能解决你的问题,请参考以下文章
七天学会ASP.NET MVC ——ASP.NET MVC 数据传递
ASP.NET MVC 5、ASP.NET Core MVC 5 有啥区别?