0

ビューからモデルにリテラル文字列を渡す必要があります。

モデルにはがDictionary<string,string>あり、ビューからキーを渡す必要があります。

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

フォローしようとしましたが成功しませんでした

  1. 二重引用符でエスケープします。例->""key ""
  2. スラッシュでエスケープします。例->\"key \"
  3. 引用符なし。例->キー
  4. モデルにconstを作成->例。Model.Key(エラー->インスタンスが必要です)
  5. 「->まだいくつかのエラーでエスケープ

以下は機能しましたが、見苦しい
です1.モデルで読み取り専用(静的ではない)を作成しました。

私は次の解決策の1つを探しています

  1. HTMLのいくつかのエスケープコード
  2. 列挙型の値をhtmlで渡します(Category.Keyなど)
  3. const値をhtmlで渡します(Constants.Keyなど)
  4. 静的な値をhtmlで渡します(Model.Keyなど)

どなたでも構いませんが、複数/すべての回答を指定していただければ幸いです。

以前は、辞書の代わりに配列があり、インデックスの受け渡しは完璧に機能していました。

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

私はMVCの初心者です。質問は基本的なものかもしれませんが、私はあきらめました。

4

2 に答える 2

2

ここでは特別なことをする必要はありません。Razorビューエンジンは文字列の処理方法を知っています。

<a href="@Url.Content("~/temp/Data/" + Model.Dict["key"])">
于 2013-01-08T06:49:55.743 に答える
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(またはモデルのstatic)を使用するには、コードの場合と同様に、フィールド/プロパティの型修飾名を使用する必要があります。

だからあなたが持っているなら

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>
于 2013-01-08T06:59:05.693 に答える