[转载].NET MVC3 中扩展一个HtmlHelper方法CheckBoxList

[转载].NET MVC3 中扩展一个HtmlHelper方法CheckBoxList – 单程列车 – 博客园.

MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码,呵呵

<span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">MvcHtmlString</span><span class="pln"> </span><span class="typ">CheckBoxList</span><span class="pun">(</span><span class="kwd">this</span><span class="pln"> </span><span class="typ">HtmlHelper</span><span class="pln"> helper</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> name</span><span class="pun">,</span><span class="pln"> </span><span class="typ">IEnumerable</span><span class="pln">
selectList</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="typ">CheckBoxList</span><span class="pun">(</span><span class="pln">helper</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">,</span><span class="pln"> selectList</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">});</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">MvcHtmlString</span><span class="pln"> </span><span class="typ">CheckBoxList</span><span class="pun">(</span><span class="kwd">this</span><span class="pln"> </span><span class="typ">HtmlHelper</span><span class="pln"> helper</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> name</span><span class="pun">,</span><span class="pln"> </span><span class="typ">IEnumerable</span><span class="pln">
selectList</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">object</span><span class="pln"> htmlAttributes</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
 
</span><span class="typ">IDictionary</span><span class="pln"> </span><span class="typ">HtmlAttributes</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">HtmlHelper</span><span class="pun">.</span><span class="typ">AnonymousObjectToHtmlAttributes</span><span class="pun">(</span><span class="pln">htmlAttributes</span><span class="pun">);</span><span class="pln">
 
</span><span class="typ">HashSet</span><span class="pln"> </span><span class="kwd">set</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">HashSet</span><span class="pun">();</span><span class="pln">
</span><span class="typ">List</span><span class="pln">
list </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">List</span><span class="pln">
</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">string</span><span class="pln"> selectedValues </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Convert</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">((</span><span class="pln">selectList </span><span class="kwd">as</span><span class="pln"> </span><span class="typ">SelectList</span><span class="pun">).</span><span class="typ">SelectedValue</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="kwd">string</span><span class="pun">.</span><span class="typ">IsNullOrEmpty</span><span class="pun">(</span><span class="pln">selectedValues</span><span class="pun">))</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">selectedValues</span><span class="pun">.</span><span class="typ">Contains</span><span class="pun">(</span><span class="str">","</span><span class="pun">))</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">string</span><span class="pun">[]</span><span class="pln"> tempStr </span><span class="pun">=</span><span class="pln"> selectedValues</span><span class="pun">.</span><span class="typ">Split</span><span class="pun">(</span><span class="str">','</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&</span><span class="pln">lt</span><span class="pun">;</span><span class="pln"> tempStr</span><span class="pun">.</span><span class="typ">Length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">set</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">tempStr</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">else</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">set</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">selectedValues</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">SelectListItem</span><span class="pln"> item </span><span class="kwd">in</span><span class="pln"> selectList</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
item</span><span class="pun">.</span><span class="typ">Selected</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">Value</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">.</span><span class="typ">Contains</span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">.</span><span class="typ">Contains</span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">);</span><span class="pln">
list</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">item</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
selectList </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">;</span><span class="pln">
 
</span><span class="typ">HtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"type"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"checkbox"</span><span class="pun">);</span><span class="pln">
</span><span class="typ">HtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"id"</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">);</span><span class="pln">
</span><span class="typ">HtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"name"</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">);</span><span class="pln">
</span><span class="typ">HtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"style"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;"</span><span class="pun">);</span><span class="pln">
 
</span><span class="typ">StringBuilder</span><span class="pln"> stringBuilder </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">StringBuilder</span><span class="pun">();</span><span class="pln">
 
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">SelectListItem</span><span class="pln"> selectItem </span><span class="kwd">in</span><span class="pln"> selectList</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="typ">IDictionary</span><span class="pln"> newHtmlAttributes </span><span class="pun">=</span><span class="pln"> </span><span class="typ">HtmlAttributes</span><span class="pun">.</span><span class="typ">DeepCopy</span><span class="pun">();</span><span class="pln">
newHtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"value"</span><span class="pun">,</span><span class="pln"> selectItem</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">selectItem</span><span class="pun">.</span><span class="typ">Selected</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
newHtmlAttributes</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="str">"checked"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"checked"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="typ">TagBuilder</span><span class="pln"> tagBuilder </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">TagBuilder</span><span class="pun">(</span><span class="str">"input"</span><span class="pun">);</span><span class="pln">
tagBuilder</span><span class="pun">.</span><span class="typ">MergeAttributes</span><span class="pun">(</span><span class="pln">newHtmlAttributes</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">string</span><span class="pln"> inputAllHtml</span><span class="pun">=</span><span class="pln"> tagBuilder</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">(</span><span class="typ">TagRenderMode</span><span class="pun">.</span><span class="typ">SelfClosing</span><span class="pun">);</span><span class="pln">
stringBuilder</span><span class="pun">.</span><span class="typ">AppendFormat</span><span class="pun">(@</span><span class="str">"<label> {0}  {1}</label>"</span><span class="pun">,</span><span class="pln">
inputAllHtml</span><span class="pun">,</span><span class="pln"> selectItem</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="typ">MvcHtmlString</span><span class="pun">.</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">stringBuilder</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">());</span><span class="pln">
 
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">IDictionary</span><span class="pln"> </span><span class="typ">DeepCopy</span><span class="pun">(</span><span class="kwd">this</span><span class="pln"> </span><span class="typ">IDictionary</span><span class="pln"> ht</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="typ">Dictionary</span><span class="pln"> _ht</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Dictionary</span><span class="pun">();</span><span class="pln">
 
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> p </span><span class="kwd">in</span><span class="pln"> ht</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
_ht</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">p</span><span class="pun">.</span><span class="typ">Key</span><span class="pun">,</span><span class="pln"> p</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> _ht</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>

可以直接拿去用

生成的每一个checkbox外部都有一个label,感觉不错,不喜欢可以去掉,还有一个 HtmlAttributes.Add(“style”, “margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;”); 是为了让显示更好看的,如果在你的样式下面位置不好看你可以把这行去掉

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

注册