将文字字符串从MVC视图传递到视图模型

时间:2013-01-08 06:44:02

标签: c# asp.net-mvc asp.net-mvc-4

我必须从视图中将文字字符串传递给模型。

模型有一个Dictionary<string,string>,我需要从视图中传递密钥。

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

我试过以下但是没能成功

  1. 以双引号逃脱。示例 - &gt; “”key“”
  2. 使用正斜杠逃生。示例 - &gt; \“key \”
  3. 没有引号。示例 - &gt;
  4. 在模型中创建const - &gt;例。 Model.Key(错误 - &gt;实例是必需的)
  5. 逃避“ - &gt;仍然有些错误
  6. 以下有效,但看起来很难看  1.在Model中创建只读(非静态)。

    我正在寻找以下解决方案之一

    1. html中的一些转义码
    2. 在html中传递枚举值(如Category.Key)
    3. 在html中传递const值(如Constants.Key)
    4. 在html中传递静态值(如Model.Key)
    5. 任何人都可以,但欢迎指定多个/全部答案。

      以前,有数组代替字典,并且传递索引工作完美。

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

      我是MVC的新手。问题可能是基本的,但我放弃了。

2 个答案:

答案 0 :(得分:2)

你不需要在这里做任何事情; Razor视图引擎知道如何处理字符串。

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

答案 1 :(得分: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>

要使用const(或模型中的任何静态),您必须使用字段/属性的类型限定名称,就像在代码中一样。

所以,如果你有

public const string Foo = "Bar";

public static readonly Foo = "Bar";

public class ThePageModel
{
    ...
}

视图中的代码看起来更像

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

同样适用于枚举,但由于你的字典接受一个字符串而不是枚举类型,为了使这个例子挂在一起,在访问视图中的枚举后会有一个.ToString()

public enum MyEnum
{
    MyDictionaryKey1,
    MyDictionaryKey2,
    MyDictionaryKey3
}

...

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