2016-04-11 13 views
0

MVC5アプリケーションにカラーピッカーを表示します。この機能は、手動で入力し、それを使用する各ページに適合させると機能します。明らかに、これは過度に複製されたコードなので、データを生成するUtilsメソッドを作成しました。ここではそのメソッドの定義は次のとおりです。ViewData ["x"]が発生する可能性がありますToStringが機能しません。

public static string GetColorsList() 
    { 
     string colorsList = "<option style=\"color:gray\" value=\"null\">select color</option>" + 
          "<option style=\"color:azure\" value=\"Azure\">Azure</option>" + 
          "<option style=\"color:blue\" value=\"Blue\">Blue</option>" + 
          "<option style=\"color:cyan\" value=\"Cyan\">Cyan</option>" + 
          "<option style=\"color:green\" value=\"Green\">Green</option>" + 
          "<option style=\"color:magenta\" value=\"Magenta\">Magenta</option>" + 
          "<option style=\"color:orange\" value=\"Orange\">Orange</option>" + 
          "<option style=\"color:red\" value=\"Red\">Red</option>" + 
          "<option style=\"color:violet\" value=\"Violet\">Violet</option>" + 
          "<option style=\"color:yellow\" value=\"Yellow\">Yellow</option>"; 

     return colorsList; 
    } 

私が代わりにIEnumerableをの文字列を返す理由は、JSメソッドが使用してページに(すなわち、テーブルに新しい行を作成する)新しいデータを追加することです:

$(#tablename tbody).append(newcontent); 

ここで、新しいコンテンツは、挿入するHTMLの文字列です。理想的には、ピッカーの内容を表示するためにHtml.DropDownListを作成することができますが、これは文字列に優しい結果を返しません。

私は何をしたいのですか:viewData ["x"]に入れて、ViewData ["x"]を文字列に変換し、その文字列をnewcontentに属する他のコンテンツと連結します。

のViewData [ "X"]のToString()次の結果が得られます。

&lt;option style=&quot;color:gray&quot; value=&quot;null&quot;&gt;select 
color&lt;/option&gt;&lt;option style=&quot;color:azure&quot; value=&quot; 
Azure&quot;&gt;Azure&lt;/option&gt;&lt;option style= 
&quot;color:blue&quot; 
value=&quot;Blue&quot;&gt;Blue&lt;/option&gt;&lt;option style=&quot; 
color:cyan&quot; value=&quot;Cyan&quot;&gt;Cyan&lt;/option&gt;&lt; 
option style=&quot;color:green&quot; value=&quot;Green&quot;&gt; 
Green&lt;/option&gt;&lt;option style=&quot;color:magenta&quot; value= 
&quot;Magenta&quot;&gt;Magenta&lt;/option&gt;&lt;option style= 
&quot;color:orange&quot; value=&quot;Orange&quot;&gt;Orange&lt;/option 
&gt;&lt;option style=&quot;color:red&quot; value=&quot;Red&quot;&gt; 
Red&lt;/option&gt;&lt;option style=&quot;color:violet&quot; value= 
&quot;Violet&quot;&gt;Violet&lt;/option&gt;&lt;option style= 
&quot;color:yellow&quot; value=&quot;Yellow&quot;&gt;Yellow&lt;/option&gt;); 

ここでの回避策を実行することです:

 colorpickerContent = colorpickerContent.replace("$lt;", "<"); 
     colorpickerContent = colorpickerContent.replace("$gt;", ">"); 
     colorpickerContent = colorpickerContent.replace("&quot;", "\""); 

をすべて適切な文字が存在するようにするため。実行時に、出力は文字列と見なすために必要な引用符で始まらないので、プログラムは構文エラーをスローします。 ViewData ["x"]を実行可能な文字列にする方法に関する提案はありますか?私はJSON.stringify()を試みましたが、同様の結果が見つかりました。

答えて

1

あなたはHtmlStringがエスケープされないようにしています。

+0

ありがとうございました、それは本当に私が必要としたものです! –

関連する問題