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 に答える