2011-09-30 74 views
2

我有在文件的頂部這個C#模塊的圖文件(.cshtml):如何在使用Razor的javascript塊變量裏面使用C#變量?

@{ 
List<string> selectedCategories = new List<string>(); 

}

好,我想用在以下JavaScript塊selectedCategories列表

@section scripts{ 
<script src="../../Scripts/jquery-1.6.4-vsdoc.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#list-all-categories").selectable({ 
      stop: function() { 
       var result = $("#selectedCategories").empty(); 
       @selectedCategories.Clear() 
       $(".ui-selected", this).each(function() { 
        var Mytext = $(this).text(); 

        @selectedCategories.Add(Mytext.toString()); 

       }); 

      } 
     }); 
    }); 
</script> 

}

因此,這是行不通的!...根本!

我有一些像這樣的錯誤: -Conditional編譯關閉 -The名「MYTEXT」不會在目前情況下 -...

我應該怎麼辦?存在 請幫助我!

回答

4
  • Javascript在瀏覽器中運行。
  • 剃刀代碼在網絡服務器

你不能像它們混合運行。

您需要通過僅使用jQuery創建表單元素,然後將它們發回sevrer。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#list-all-categories").selectable({ 
      stop: function() { 
       $(".selectedItems").remove(); 
       $(".ui-selected", this).each(function() { 
       var Mytext = $(this).text(); 
       $('#myform').append('<input type="hidden" name="selectedCategory" value="' + MyText + '" class="selectedItems" />'); 
      }); 
     }); 
    }); 
</script> 

將「myform」更改爲發佈的表單。

然後你獲得的物品爲:

public ActionResult YourAction(string[] selectedCategory) 
{ 
} 
+0

你能舉個例子嗎?! –

+0

thanx ...林思考如何使用這個例子來解決我的問題... –

+0

我已經更新了我的答案。 – jgauffin

1

的問題是,剃刀表達式編譯服務器端,網頁到達Web瀏覽器之前。但JavaScript在客戶端的「運行時」被解釋。因此,你不能像這樣將東西添加到JavaScript的c#-list。

也許,如果你需要在後端維護一個c#-list,你可以在控制器上做一個動作,你可以通過Ajax發送項目。

1

Razor代碼由Web服務器在構建文本時運行,此時Javascript只是純文本。

Razor只是讓這個東西更容易閱讀,但實際上它只是將服務器執行與字符串文本塊結合起來。

你的例子實際上是這樣做的:

,因爲它不存在服務器端
Response.Write(@" 
<script src=""../../Scripts/jquery-1.6.4-vsdoc.js"" type=""text/javascript""></script> 
<script type=""text/javascript""> 
$(document).ready(function() { 
    $(""#list-all-categories"").selectable({ 
     stop: function() { 
      var result = $(""#selectedCategories"").empty();"); 

Response.Write(selectedCategories.Clear()); 

Response.Write(@"$("".ui-selected"", this).each(function() { 
       var Mytext = $(this).text();"); 

Response.Write(selectedCategories.Add(Mytext.ToString())); 

Response.Write(@"}); 

     } 
    }); 
}); 
</script>"); 

所以,你得到的Mytext編譯例外 - 所有的JavaScript是隻是文本字符串到服務器端的.Net碼。