2013-01-08 128 views
0

我必須將文字字符串從視圖傳遞給模型。從MVC視圖傳遞文字字符串以查看模型

模型有一個Dictionary<string,string>,我需要從視圖中傳遞密鑰。

<a href="@Url.Content("~/temp/Data/" + Model.Dict[<Need to pass key here ???>])" 

我曾嘗試以下,但未能成功

  1. 逃生用雙引號。示例 - >「」鍵「」
  2. 用正斜槓轉義。示例 - > \「鍵\」
  3. 不含引號。示例 - >鍵
  4. 在model - > Example中創建const。 Model.Key(錯誤 - >是必需的實例)
  5. 逃生與" - >還有一些錯誤

以下工作過,但看起來醜陋
1.創建只讀的模式(而不是靜態)。

我找了以下解決方案

  1. 一些轉義代碼中的一個HTML
  2. 在HTML(如Category.Key)傳遞枚舉值在HTML(
  3. 通常量值像常量。鍵)
  4. 通靜態值在HTML(如Model.Key)

任何一個是好的,但指定多個/所有的答案是我們lcomed。

以前,有代替字典的數組,並且通過索引工作完美。

<a href="@Url.Content("~/temp/Data/" + Model.Dict[0])" 

我是MVC的新手。這個問題可能很基本,但我已經放棄了。

回答

2

如何創建一個變量來保存Razor代碼塊中的字符串並將它傳遞給字典?

@{ 
    //Set the value of the key to a temporary variable 
    var theKey = "key"; 
} 

<!-- Reference the temporary variable in the indexer --> 
<a href="@Url.Content("~/temp/Data/" + Model.Dict[theKey])"></a> 

要使用常量(或從模型中的任何靜態),你必須使用字段/屬性的類型合格的名字,就像在代碼。

所以,如果您在視圖看起來更像

<a href="@Url.Content("~/temp/Data/" + Model.Dict[MyApplication1.Models.ThePageModel.Foo])"></a> 
0拿到

public const string Foo = "Bar"; 

public static readonly Foo = "Bar"; 

public class ThePageModel 
{ 
    ... 
} 

您的代碼

同樣適用於枚舉,儘管由於您的字典接受了一個字符串而不是枚舉類型,所以爲了使這個例子在一起,在訪問視圖中的枚舉後會出現.ToString()

public enum MyEnum 
{ 
    MyDictionaryKey1, 
    MyDictionaryKey2, 
    MyDictionaryKey3 
} 

... 

<a href="@Url.Content("~/temp/Data/" + Model.Dict[MyApplication1.Models.MyEnum.MyDictionaryKey1.ToString()])"></a> 
+0

它工作。我的錯。固定需要在多個地方,我只提供1個地方。但我也在尋找其他方法。這看起來也不錯。 – Tilak

+0

@Tilak更新以反映情景2-4 – mlorbetske

2

你不需要在這裏做任何事情; Razor視圖引擎知道如何處理字符串。

<a href="@Url.Content("~/temp/Data/" + Model.Dict["key"])"> 
+0

這是我第一次嘗試沒有工作 – Tilak

+0

您是否收到錯誤信息? –

+0

錯誤CS1502:'System.Collections.Generic.Dictionary .this [string]'的最佳重載方法匹配有一些無效參數 – Tilak