我试图在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?这似乎相当圆润.
我有以下两种方法从我的数据库中获取数据并返回一个填充的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)
任何人都可以帮助弄清楚如何将这些重构为一个方法?
我是asp.net mvc的新手,请原谅我,如果我的问题太简单了.
我只想要一个使用Html.DropDownList从0到10的下拉列表.什么是最快的方式?目前我只看到创建一个IEnumerable的SelectListItem的解决方案,添加10个值并通过viewdata传递它,但我认为这是过度的,如何以一种简单的方式做到这一点?
提前致谢
我有两个选择列表,您可以在其中移动所选选项.您还可以在右侧列表中上下移动选项.
当我将选项移回左侧列表时,我希望它们在列表顺序中保留其原始位置,即使列表缺少某些原始选项.这仅仅是为了使列表对用户更方便.
我目前正在定义一个包含原始Select列表onload的数组.
实现这个的最佳方法是什么?
我觉得我的问题与这个问题很接近,但是我想要更一般地讨论这样的代码应该放在哪里.Asp.Net MVC SelectList重构问题?
我目前直接在我的实体模型上创建我的选择列表,就像这样.
public SelectList taskDeadlineTime
{
get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); }
}
Run Code Online (Sandbox Code Playgroud)
这感觉有点不对,好像我在我的模型中执行查看工作.
然而,它确实意味着我可以获得该属性,我的选择列表就在那里.
现在,我应该将这个逻辑放在我的控制器中(更多代码来编写)或查看(感觉错误和杂乱)或者只是以不同的方式进行.
我现在看这个的原因是因为我正在比较同一对象实体的两个副本,并且将选择列表作为getter的一部分直接意味着它不起作用.我知道我可以修改这个比较来处理这个问题,但是在模型中做一些可视化的东西感觉不对(除非准备选择列表是模型中正确的东西)
我正在尝试对返回SelectList的函数进行单元测试.
如何从SelectList中检索项目以验证我的模型是否正确构造?
mySelectList.Items.First().DataValue
管他呢.
目前我们的开发团队使用这种模式,但我不禁想知道是否有更快或更高效的方法来完成相同的任务.
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) 对于我的网络应用程序,我有一个编码如下的选择列表;
<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文件中,我有两个函数 - saveSettings和loadSettings.我不知道如何将它保存到saveSettings函数中的localStorage(JavaScript)并将其读回loadSettings中的用户.任何帮助将非常感谢谢谢x
我正在使用MVC4.
我有以下下拉列表/选择列表:
@Html.DropDownList("EmployerID", String.Empty)
ViewBag.EmployerID = new SelectList(db.Employers, "EmployerID", "Name", contact.EmployerID);
Run Code Online (Sandbox Code Playgroud)
我希望这个下拉列表/选择列表按"名称"排序.我该怎么办?
非常感谢!:)
我正在使用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) selectlist ×10
asp.net-mvc ×5
javascript ×3
c# ×2
c#-4.0 ×1
function ×1
html-select ×1
ienumerable ×1
jquery ×1
json ×1
linq ×1
post ×1
refactoring ×1
reflection ×1