标签: selectlist

通过ViewData为DropDownList提供SelectList的强类型视图:提交时类型不匹配

我试图在ASP.NET MVC2 RC 2中创建一个基于日历事件对象的表单.该对象有eventTypeId,它是我需要通过选择列表填充的System.Int32.

用于创建初始视图的控制器是:

[WAuthorize]
public ActionResult AddCalendarEvent()
{
    CalendarEventTypesManager calendarEventTypesManager = 
        new CalendarEventTypesManager();

    ViewData["eventTypeId"] = new SelectList(
        calendarEventTypesManager.SelectAll(), "Id", "Type");

    return View();
}
Run Code Online (Sandbox Code Playgroud)

View的片段(带标题)是:

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Extranet.master"
    Inherits="System.Web.Mvc.ViewPage<SomeProject.Models.CalendarEvent>" %>

...

<p><%= Html.DropDownList("eventTypeId") %></p>
Run Code Online (Sandbox Code Playgroud)

哪个结果的HTML:

<p>
<select id="eventTypeId" name="eventTypeId">
    <option value="1">All school activities</option> 
    <option value="2">All school event</option> 
</select>
</p> 
Run Code Online (Sandbox Code Playgroud)

POST接受控制器是:

[WAuthorize]
// TODO research some more
[ValidateInput(false)]              
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public ActionResult AddCalendarEvent(CalendarEvent newEvent)
{
    ...
Run Code Online (Sandbox Code Playgroud)

(我尝试[Bind (Exclude="eventTypeId")]在"CalendarEvent newEvent"参数前面添加,但它不会改变行为.)

问题:当我提交表单时,我收到一个InvalidOperationException异常:

具有键'eventTypeId'的ViewData项的类型为'System.Int32',但必须是'IEnumerable <SelectListItem>'类型.

我在这里和MVC博客上看了很多例子,但到目前为止还不清楚它应该如何工作(看起来基于很多例子,它应该按原样运行).我是否需要创建第二个具有SelectListItem类型变量的模型来接受SelectListItem并将值转换为System.Int32以实际设置eventTypeId?这似乎相当圆润.

asp.net-mvc post selectlist selectlistitem drop-down-menu

5
推荐指数
1
解决办法
7254
查看次数

重构两个将SelectList生成为单个方法的方法

我有以下两种方法从我的数据库中获取数据并返回一个填充的SelectList对象(包括一个"All"选项值),然后我将其传递给我的视图.问题是它们几乎完全相同,除了它们都访问不同的存储库对象并且它们具有不同的ID名称(StatusId和TeamId).我认为有机会将它们重构为一个接受存储库作为参数的方法,并以某种方式计算出ID名称应该是什么,可能是通过使用反射或某种lambda表达式,但我不知道如何实现这一目标.

private SelectList GetStatusSelectList(int selectedStatusId)
{
  List<MemberStatus> statusList = _memberStatusRepository.All().ToList();
  statusList.Insert(0, new MemberStatus {StatusId = 0, Name = "All"});
  var statusSelectList = new SelectList(statusList, "StatusId", "Name", selectedStatusId);
  return statusSelectList;
}

private SelectList GetTeamSelectList(int selectedTeamId)
{
  List<MemberTeam> teamList = _memberTeamRepository.All().ToList();
  teamList.Insert(0, new MemberTeam { TeamId = 0, Name = "All" });
  var teamSelectList = new SelectList(teamList, "TeamId", "Name", selectedTeamId);
  return teamSelectList;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助弄清楚如何将这些重构为一个方法?

c# reflection refactoring selectlist

5
推荐指数
1
解决办法
195
查看次数

创建asp.net mvc下拉列表的最简单方法,其值为0到10?

我是asp.net mvc的新手,请原谅我,如果我的问题太简单了.

我只想要一个使用Html.DropDownList从0到10的下拉列表.什么是最快的方式?目前我只看到创建一个IEnumerable的SelectListItem的解决方案,添加10个值并通过viewdata传递它,但我认为这是过度的,如何以一种简单的方式做到这一点?

提前致谢

asp.net-mvc selectlist drop-down-menu

4
推荐指数
1
解决办法
1385
查看次数

如何将(不完整的)选择列表的顺序恢复为原始顺序?

我有两个选择列表,您可以在其中移动所选选项.您还可以在右侧列表中上下移动选项.

当我将选项移回左侧列表时,我希望它们在列表顺序中保留其原始位置,即使列表缺少某些原始选项.这仅仅是为了使列表对用户更方便.

我目前正在定义一个包含原始Select列表onload的数组.

实现这个的最佳方法是什么?

javascript selectlist

4
推荐指数
1
解决办法
4758
查看次数

选择列表逻辑应该放在ASP.NET MVC,视图,模型还是控制器中?

我觉得我的问题与这个问题很接近,但是我想要更一般地讨论这样的代码应该放在哪里.Asp.Net MVC SelectList重构问题?

我目前直接在我的实体模型上创建我的选择列表,就像这样.

public SelectList taskDeadlineTime
    {
        get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); }
    }
Run Code Online (Sandbox Code Playgroud)

这感觉有点不对,好像我在我的模型中执行查看工作.

然而,它确实意味着我可以获得该属性,我的选择列表就在那里.

现在,我应该将这个逻辑放在我的控制器中(更多代码来编写)或查看(感觉错误和杂乱)或者只是以不同的方式进行.

我现在看这个的原因是因为我正在比较同一对象实体的两个副本,并且将选择列表作为getter的一部分直接意味着它不起作用.我知道我可以修改这个比较来处理这个问题,但是在模型中做一些可视化的东西感觉不对(除非准备选择列表是模型中正确的东西)

c# asp.net-mvc selectlist

4
推荐指数
1
解决办法
2045
查看次数

从SelectList获取第N项

我正在尝试对返回SelectList的函数进行单元测试.

如何从SelectList中检索项目以验证我的模型是否正确构造?

mySelectList.Items.First().DataValue

管他呢.

linq ienumerable selectlist selectlistitem c#-4.0

4
推荐指数
1
解决办法
2250
查看次数

使用JQuery/Json填充选择列表的最佳方法是什么?

目前我们的开发团队使用这种模式,但我不禁想知道是否有更快或更高效的方法来完成相同的任务.

HTML

<select id="myList" style="width: 400px;">
</select>
<script id="myListTemplate" type="text/x-jQuery-tmpl">
        <option value="${idField}">${name}</option>
</script>
Run Code Online (Sandbox Code Playgroud)

这是Javascript:

function bindList(url) {
    callAjax(url, null, false, function (json) {
        $('#myList').children().remove();
        $('#myListTemplate').tmpl(json.d).appendTo('#myList');
    });
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery json selectlist jquery-templates

4
推荐指数
1
解决办法
1万
查看次数

如何在选择列表中保存选定的选项

对于我的网络应用程序,我有一个编码如下的选择列表;

<select name = 'job' id = 'job'>
<option value = 'jobselect'>Select Profession</option>
<option value = 'job1'>Mechanical Engineer</option>
<option value = 'job2'>Software Engineer</option>
<option value = 'jobother'>Other</option>
</select>
Run Code Online (Sandbox Code Playgroud)

在设置页面中.此页面链接到"save.js"文件,其中应保存用户输入.我正在使用HTML和JavaScript - 而且不了解PHP.在我的JS文件中,我有两个函数 - saveSettingsloadSettings.我不知道如何将它保存到saveSettings函数中的localStorage(JavaScript)并将其读回loadSettings中的用户.任何帮助将非常感谢谢谢x

javascript function selectlist local-storage

4
推荐指数
1
解决办法
9612
查看次数

MVC4:如何对此选择列表/下拉列表进行排序

我正在使用MVC4.

我有以下下拉列表/选择列表:

@Html.DropDownList("EmployerID", String.Empty)

ViewBag.EmployerID = new SelectList(db.Employers, "EmployerID", "Name", contact.EmployerID);
Run Code Online (Sandbox Code Playgroud)

我希望这个下拉列表/选择列表按"名称"排序.我该怎么办?

非常感谢!:)

asp.net-mvc html-select selectlist

4
推荐指数
1
解决办法
1万
查看次数

DropDownList不选择SelectList中的选定项

我正在使用ASP.NET MVC3应用程序,我无法在特定的编辑器视图中使用DropDownListFor来处理我的属性.

我的模型是a Person和一个人有一个属性,指定它的"人物类型".PersonType是一个包含名称/描述和ID的类.我可以PersonType通过我的静态/共享类访问应用程序中的可用s ApplicationSettings.

在我的编辑模板视图中,我Person创建了一个SelectList用于调试的目的:

@ModelType MyNamespace.Person
@Code
    Dim pTypesSelectList As New SelectList(MyNamespace.ApplicationSettings.PersonTypes, "ID", "Name", Model.PersonType.ID)
End Code
Run Code Online (Sandbox Code Playgroud)

然后我提供这个SelectList作为参数DropDownListFor绑定到PersonType我的属性Person.

我也在打印Selected每个项目的属性以SelectList进行调试:

<div style="text-align: center; margin: 5px 0 0 0;">
    <div>
        @Html.LabelFor(Function(model) model.PersonType)
    </div>
    <div>
        @Html.DropDownListFor(Function(model) model.PersonType, pTypesSelectList)
        @Html.ValidationMessageFor(Function(model) model.PersonType)

        <br />
        <br />
        <!-- The following is debugging code that shows the actual value-->
        @Model.Type.Name
        <br />
        @Model.Type.ID …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc selectlist html.dropdownlistfor asp.net-mvc-3

3
推荐指数
1
解决办法
3984
查看次数