C# Razor MVC获取SQL语句的select选项ID
我正在尝试用razor提交一个简单的表单,需要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
<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)