gpt4 book ai didi

asp.net-mvc-2 - MVC 中的 Optgroup 下拉支持 - 模型绑定(bind)问题

转载 作者:行者123 更新时间:2023-12-04 02:00:42 25 4
gpt4 key购买 nike

我想知道是否有人可以阐明这个问题..

我有一个用于选择一个人的种族的选项组下拉列表——但是它没有将值存储在模型中。

查看型号

    [UIHint("EthnicOriginEditorTemplate")]
[DisplayName("Question 6: Ethnic Origin")]
public int EthnicOrigin { get; set; }

助手:GroupDropList.Cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web.Routing;

namespace Public.Helpers
{
public static class GroupDropListExtensions
{
public static string GroupDropList(this HtmlHelper helper, string name, IEnumerable<GroupDropListItem> data, int SelectedValue, object htmlAttributes)
{
if (data == null && helper.ViewData != null)
data = helper.ViewData.Eval(name) as IEnumerable<GroupDropListItem>;
if (data == null) return string.Empty;

var select = new TagBuilder("select");

if (htmlAttributes != null)
select.MergeAttributes(new RouteValueDictionary(htmlAttributes));

select.GenerateId(name);

var optgroupHtml = new StringBuilder();
var groups = data.ToList();
foreach (var group in data)
{
var groupTag = new TagBuilder("optgroup");
groupTag.Attributes.Add("label", helper.Encode(group.Name));
var optHtml = new StringBuilder();
foreach (var item in group.Items)
{
var option = new TagBuilder("option");
option.Attributes.Add("value", helper.Encode(item.Value));
if (SelectedValue != 0 && item.Value == SelectedValue)
option.Attributes.Add("selected", "selected");
option.InnerHtml = helper.Encode(item.Text);
optHtml.AppendLine(option.ToString(TagRenderMode.Normal));
}
groupTag.InnerHtml = optHtml.ToString();
optgroupHtml.AppendLine(groupTag.ToString(TagRenderMode.Normal));
}
select.InnerHtml = optgroupHtml.ToString();
return select.ToString(TagRenderMode.Normal);
}
}

public class GroupDropListItem
{
public string Name { get; set; }
public List<OptionItem> Items { get; set; }
}

public class OptionItem
{
public string Text { get; set; }
public int Value { get; set; }
}
}

这是我的编辑器模板
<%@ Import Namespace="Public.Helpers"%>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int>"%>

<%=Html.GroupDropList("EthnicOrigin",
new[]
{
new GroupDropListItem
{
Name = "Ethnicity",
Items = new List<OptionItem>
{
new OptionItem {Value = 0, Text = "Please Select"}
}
},

new GroupDropListItem
{
Name = "a) White",
Items = new List<OptionItem>
{
new OptionItem {Value = 1, Text = "British"},
new OptionItem {Value = 2, Text = "Irish"},
new OptionItem {Value = 3, Text = "Other White (Please specify below)"}
}
},

--snip

}, Model, null)%>

在 View 中,我将其引用为:
<%=Html.EditorFor(x => x.EthnicOrigin, "EthnicOriginEditorTemplate")%>

但是,它没有将选定的值传递到模型中...有没有人遇到过类似的问题...在此先感谢您的一些指示。

最佳答案

您的 select没有 name属性,因此当您提交表单时,所选值不会发送到服务器。您需要添加一个名称:

select.GenerateId(name);
select.MergeAttribute("name", name);

关于asp.net-mvc-2 - MVC 中的 Optgroup 下拉支持 - 模型绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142986/

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