2017-09-25 97 views
1

我想表明在html.dropdownlist与缩进项目 变化& NBSP在asp.net mvc的html.dropdownlist

这是控制器

IEnumerable<ViewModels.testvm> test = db.Database.SqlQuery<ViewModels.testvm>(@"WITH tree (id, parentid, level, title, rn) as 
(
    some code 
) 
***********SELECT id,REPLICATE('&nbsp;',level) + title as title 
FROM tree 
order by RN"); 
ViewBag.ParentID = new SelectList(test, "ID", "Title"); 

代码,你可以看到我添加& NBSP到下拉项replecate

但问题是& NBSP显示在下拉列表中。

这是视图>源结果:

<select class="form-control" id="ParentID" name="ParentID"><option 

value="10">Menu1</option> 
<option value="11">&amp;nbsp;Sub1</option> 
<option value="14">&amp;nbsp;Submenu1</option> 
<option value="12">Menu2</option> 
<option value="16">&amp;nbsp;sub2</option> 
<option value="13">Menu3</option> 
<option value="15">&amp;nbsp;sub3</option> 
<option value="17">&amp;nbsp;&amp;nbsp;sub sub</option> 
<option value="22">&amp;nbsp;&amp;nbsp;&amp;nbsp;sub3 sub sub</option> 
<option value="19">menu4</option> 
<option value="20">&amp;nbsp;sub4</option> 
<option value="21">menu5</option> 
</select> 

你可以看到&nbsp;转换为&amp;nbsp;

我试过"\xA0"而不是&nbsp但它显示在下拉列表中呢!

我觉得html.raw可以解决,但我不知道我该如何使用它html.dropdownlist。

这个观点

<div class="col-md-10"> 

@Html.DropDownList("ParentID", null, htmlAttributes: new { @class = "form- 
control" }) 

</div> 

什么想法?


编辑

通过改变视图这样的问题就迎刃而解了: 我尝试这样做检查后作为回答后

<select class="form-control" id="ParentID" name="ParentID"> 
     <option value="0">First Level</option> 
     @foreach (var item in ViewBag.ParentID) 
     { 
      <option value="@item.Value">@Html.Raw(@item.Text)</option> 
     } 
    </select> 
+1

我想你需要阅读这个:https://stackoverflow.com/questions/8239348/how-to-use-html-raw-in-mvc-razor-dropdownlist。每个'SelectListItem'选择项目都很难使用'Html.Raw',所以尝试使用基于CSS的样式。 –

+0

这是一个动态的n级下拉列表,我如何根据它的级别设置每个项目的样式?我的意思是,margin:10px;对于第一级,保证金:其他项目的10px *级别? – user3250818

+1

你不能使用'DropDownList()'做这个 - 方法建立它自己的'IEnumerable '并且结果被编码。你可以做它用(说)连字符,否则你将需要手动生成HTML或者创建自定义'HtmlHelper'扩展方法 –

回答

0

您可以手动创建下拉列表假设你的地方您的收藏在一个视图模型成员叫ParentIDs

观:

@if (Model.ParentIDs.Any()) 
{ 
    <select class="form-control" id="ParentID" name="ParentID"> 
     @foreach (var item in Model.ParentIDs) 
     { 
      if (Model.ParentID == item.id) 
      { 
       <option value="@item.id" selected>@item.title</option> 
      } 
      else 
      { 
       <option value="@item.id">@item.title</option> 
      } 
     } 
    </select> 
} 
+0

Locke125,之前我尝试过类似的方法,但它没有保留手动创建的dropdownlist的选定值,我会再试一次,如果有任何成功的话,会写在这里。 – user3250818

+0

我添加了一些代码,可以帮助设置选定的状态。尽管如此,你将不得不在模型中的某处。 –