gpt4 book ai didi

c# - .NET MVC 3 在 C# 中向 SelectListItem 添加属性

转载 作者:太空狗 更新时间:2023-10-29 15:52:06 25 4
gpt4 key购买 nike

所以我试图在下拉列表中对标签进行样式化。我的 MVC 助手的设置有点像这样,但真正的东西是从数据库中提取的,所以数据不是硬编码的。

@{
List<string> ListOfText = new List<string> { "FirstThing","SecondThing","ThirdThing"};
List<string> ListOfValue = new List<string> { "1","2","3"};
List<SelectListItems> ListOFSELCETLISTITEMS = new List<SelectListItem>();

for (int x = 0; x < 3; x++)
{
ListOFSELCETLISTITEMS .Add(new SelectListItem
{
Text = ListOfText[x],
Value = ListOfValue[x],
Selected = (selectedValue == ListOfValue[x])
});
}
}
@Html.DropDown("NAME",ListOFSELCETLISTITEMS)

这给了我类似的东西

<select id="Name" name="Name">
<option value="1">FirstThing</option>
<option value="2">SecondThing</option>
<option value="3">ThirdThing</option>
</select>

我需要的是这样的东西

<select id="Name" name="Name">
<option value="1" class="option1">FirstThing</option>
<option value="2" class="option2">SecondThing</option>
<option value="3" class="option3">ThirdThing</option>
</select>

我试过做类似的事情

@{
List<string> ListOfText = new List<string> { "FirstThing","SecondThing","ThirdThing"};
List<string> ListOfValue = new List<string> { "1","2","3"};
}
<select id="Name" name="Name">
@ for (int x = 0; x < 3; x++)
{
<text>
<option value="@ListOfValue[x]" @{if(selectedValue == ListOfValue[x])
{ @Html.Raw("selected='selected'") }}
@class = '@Html.Raw("option"+x)'>
@ListOfText[x]
</option>
</text>
}
</select>

但这似乎让 Controller 感到困惑,并且它无法识别上方下拉菜单的值映射到

public ActionResult method(string Name)

在 Controller 上发布或获取。行吧

 @Html.DropDown("NAME",ListOFSELCETLISTITEMS)

在 View 中确实允许 Controller 理解方法应该映射到该下拉列表的值。

我该怎么做?有没有办法消除 Controller 的混淆并能够在没有 Html.helpers 的情况下手写 HTML?

最佳答案

要直接渲染 Controller 操作,您可以尝试:

@{ Html.RenderAction(Action, Controller); }

调用您的 Controller 操作,该操作应返回包含您的内容的字符串。

[HttpGet]
public string Action(int id)
{
return your context in here
}

但是我认为添加一个 Ajax 操作返回用于构建选择的数据并在获得结果后使用 jquery 解决方案添加一个类(可以在 AJAX 响应本身中返回)会更清晰

编辑:澄清:

假设您有一个 Item 集合,如下所示:

class Item {
public int Value { get; set; }
public string CssClass { get; set; }
public string Description{ get; set; }
}
private const string EMPTY_OPTION = "<option value=''></option>";
[HttpGet]
public string Action(int id)
{
// Load a collection with all your option's related data
IQueryable data = LoadSomethingFromDbOrWherever(id);
// Build output
StringBuilder sb = new StringBuilder();
sb.AppendFormat("<select id='foo' name='foo'>");
sb.AppendFormat(EMPTY_OPTION);
foreach (Item b in data)
{
sb.AppendFormat("<option value='{0}' class='{1}'>{2}</option>",
b.Value, b.CssClass, b.Description);
}
sb.AppendFormat("</select>");
return sb.ToString();
}

对于 ajax 选项:

[HttpGet]
public JsonResult Action(int id)
{
//same as above, obtain a collection
// Load a collection with all your option's related data
IQueryable data = LoadSomethingFromDbOrWherever(id);
var jsonData = new
{
from c in data
select new
{
Value= c.Value,
CssClass = c.CssClass,
Description = c.Desription
}).ToArray()
};
return Json(jsonData);
}

通过 $.ajax 调用它,在回调中您将拥有一个包含所有数据的 javascript 对象,然后使用 jQuery 构建选择选项。

问候

关于c# - .NET MVC 3 在 C# 中向 SelectListItem 添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com