C# Razor MVC获取SQL语句的select选项ID

C# Razor MVC获取SQL语句的select选项ID,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我正在尝试用razor提交一个简单的表单,需要 <select> <option id=""> //this is what i neeed to perform an insert > </option> </select> 由于我需要执行sql连接,而且我不知道如何通过razor获得该id,所以该值本身就不起作用。任何帮助都将不胜感激。谢谢 编辑: 抱歉,更新太晚了。找到了一个相对简单的解决方法,因为我必须使用id,而不是J

我正在尝试用razor提交一个简单的表单,需要

<select>
   <option id=""> //this is what i neeed to perform an insert >
   </option>
</select>
由于我需要执行sql连接,而且我不知道如何通过razor获得该id,所以该值本身就不起作用。任何帮助都将不胜感激。谢谢

编辑:

抱歉,更新太晚了。找到了一个相对简单的解决方法,因为我必须使用id,而不是Javascript函数的select列表中的值。我完全知道,这可能不是razor的正确用法,但与重写整个模型/视图/控制器相比,它被证明是有效的

    <div class="editor-label">
     @Html.LabelFor(model => model.aPracticar.Value, "Actividad")
    </div>
    <div class="editor-field">
        <select class="form-control" id="aPracticar_Value" >                
            <option value="">Seleccione la actividad...</option>
             @foreach (var actividad in actividades)
             {  
                <option id="@actividad.idDeporte" value="@actividad.Value">
                          @actividad.Text</option>

         }                                   
    </select>
     @Html.HiddenFor(u => u.aPracticar.idDeporte)
     <br />
 </div>

@LabelFor(model=>model.apracicar.Value,“Actividad”)
塞莱奇奥尼·拉阿维达德。。。
@foreach(actividades中的var actividad)
{  
@爸爸,文本
}                                   
@Html.HiddenFor(u=>u.aPracticar.idreporte)


然而,我将下面的一个答案标记为正确的,因为这是剃须刀预期用途的一个示例。再次感谢大家的宝贵意见。

要通过
DropDownList
helper插入下拉列表选项,请根据预定义模型构建
list
或创建
SelectList
构造函数:

// assume Model.Selecciones is an IEnumerable option list
@Html.DropDownListFor(model => model.aPracticar, "actividades", new SelectList(Model.Selecciones), new { @class="form-control" })

// assume Model.ListaSelecciones is a SelectListItem option list
@Html.DropDownListFor(model => model.aPracticar, "actividades", Model.ListaSelecciones, new { @class="form-control" })
它们将大致转换为HTML,如下所示:

<select class="form-control" name="aPracticar">
    <option value="Valor">Texto</option>
    <!-- other option values -->
</select>

请阅读模型绑定的DropDownList的正确用法。

如果您的实体具有来自其他实体的外键,并且您希望通过razor在下拉列表中显示所有其他实体的值,您可以首先在您的操作中创建一个selectList,该列表将转到您的视图,如:

var aPracticar=_modelService.getAll();   

ViewBag.Parcticar=new SelectList(aPracticar,"ID","Title");
然后通过viewBag将此selectList发送到您的视图中,并在视图中使用,如:

@Html.DropDownListFor(model => model.aPracticar,(SelectList)ViewBag.Parcticar)
它可以在html中使用键和值创建selectList,键是一个活动的Id,值是您希望显示为selectList标题的内容


/*编辑了错误的评论,不是我原来的帖子,对不起*/

元素需要一个
属性(而不是
id
),并且
会回发所选
选项的值(如果不存在
属性,则回发文本)。您的
DropDownListFor()
方法中的
actividades
是什么如果您提供了正确的数据,那么
DropDownListForId()
方法将正确完成所有这一切。您的
DropDownListForId()
扩展有什么意义?将
id
属性添加到
中没有任何作用(一个
元素提交
属性-该
id
被忽略)对,id属性仅在OP希望从JS客户端获取选项id或从ajax回调发送时可用,类似于为
标记添加类属性。DDL本身总是在回发时通过value属性将数据发送到绑定模型,如果没有定义值,则发送选项文本。
public class ExtendedSelectListItem : SelectListItem
{
    public Object htmlAttributes { get; set; }
}

public class CustomHtmlHelper
{
    // taken from stackoverflow.com/a/7772354: requires by HTML helper to get model state
    public static Object GetModelStateValue(HtmlHelper helper, String key, Type destinationType)
    {
        ModelState state;
        if (helper.ViewData.ModelState.TryGetValue(key, out state))
        {
            if (state.Value != null)
            {
                return state.Value.ConvertTo(destinationType, CultureInfo.InvariantCulture);
            }
        }
        return null;
    }

    // this part inspired from stackoverflow.com/a/7537628
    public static MvcHtmlString DropDownListForId<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IEnumerable<ExtendedSelectListItem> selectList, String optionLabel, Object htmlAttributes = null)
    {
        String name = ExpressionHelper.GetExpressionText(expression);
        String fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        if (String.IsNullOrEmpty(fullName))
        {
            throw new ArgumentException("Name is undefined");
        }

        if (selectList == null)
        {
            throw new ArgumentException("Select list is empty");
        }

        Object defaultValue = GetModelStateValue(helper, fullName, typeof(String));
        if (defaultValue == null) 
        {
            defaultValue = helper.ViewData.Eval(fullName);
        }
        else
        {
            var defaultValues = new[] { defaultValue };
            IEnumerable<String> listvalues = (from value in defaultValues select value.ToString();
            var selectedValues = new HashSet<String>(listvalues, StringComparer.OrdinalIgnoreCase);
            var newSelectList = new List<ExtendedSelectListItem>();

            foreach (ExtendedSelectListItem item in selectList)
            {
                item.Selected = (item.Value != null) ? selectedValues.Contains(item.Value) : selectedValues.Contains(item.Text);
                newSelectList.Add(item);
        }
        selectList = newSelectList;
        }

        var listItems = new StringBuilder();
        foreach (ExtendedSelectListItem item in selectList)
        {
            listItems.Append(ListItemToOption(item));
        }

        var tagBuilder = new TagBuilder("select")
        {
            InnerHtml = listItems.ToString()
        };

        tagBuilder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
        tagBuilder.MergeAttribute("name", fullName, true);
        tagBuilder.GenerateId(fullName);

        ModelState state;
        if (helper.ViewData.ModelState.TryGetValue(fullName, out state))
        {
            if (state.Errors.Count > 0)
            {
               tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
            }
        }
        tagBuilder.MergeAttributes(helper.GetUnobtrusiveValidationAttributes(name));

        return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
    }


    public static String ListItemToOption(ExtendedSelectListItem item)
    {
        var builder = new TagBuilder("option")
        {
            InnerHtml = HttpUtility.HtmlEncode(item.Text)
        };

        if (item.Value != null)
        {
            builder.Attributes["value"] = item.Value;
            builder.Attributes["id"] = item.Value;
        }
        if (item.Selected)
        {
            builder.Attributes["selected"] = "selected";
        }
        builder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(item.htmlAttributes));
        return builder.ToString(TagRenderMode.Normal);
    }
}
var aPracticar=_modelService.getAll();   

ViewBag.Parcticar=new SelectList(aPracticar,"ID","Title");
@Html.DropDownListFor(model => model.aPracticar,(SelectList)ViewBag.Parcticar)