3

我在 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 引擎应该将代码解析为(例如):

<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)"
  ...>
4

2 回答 2

3

只需创建另一个变量字符串:

@{
    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
  }))
于 2013-04-11T11:41:51.737 回答
0

当您分配 OnComplete 值时,请去掉 @。您不需要它,因为您已经在服务器端代码的上下文中。

@用于将html渲染上下文切换到服务器端代码,<text></text>用于从服务器端上下文切换到html渲染。在上面给出的示例中,您已经在该BeginForm()方法的服务器端代码上下文中,因此不需要 @。您不会将值写入onComplete页面,而是BeginForm()会处理所有这些。

于 2013-04-11T14:32:08.143 回答