我有一个注册表单,显示用户名称(文本框),电子邮件(文本框)和分区(选择列表).名称和电子邮件已预先填充(我正在使用Windows身份验证,Intranet应用程序),我想将DropDown中的SelectedValue作为Int32发送到我的控制器,我不想再发送整个SelectList.这个清单现在很小,但会增长到相当大的规模.
我是一个名为的类RegistrationViewModel,它包含这些字段的公共属性.但是,当我SelectList用于DivisionList时,我收到此错误:No parameterless constructor defined for this object..
如果我更改Type,它没有问题,但是Division是null或0.有没有办法将SelectedValue从DropDown传递给Controller Action作为Int32?
我不确定我在做什么,我一直在使用MVC大约48小时,看过PDF,TechEd和TechDays视频.
道歉,这是我的控制器代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(RegistrationViewModel rvm)
{
IApplicationContext context = ContextRegistry.GetContext();
IValidationErrors errors = new ValidationErrors();
IValidator validator = (IValidator)context.GetObject("RegistrationValidator");
bool valid = validator.Validate(rvm, errors);
if (valid)
repo.SaveRegistration();
else
ViewData["DivisionList"] = repo.GetDivisions();
return View(rvm);
}
Run Code Online (Sandbox Code Playgroud)
RegistrationViewModel 类
public class RegistrationViewModel
{
public string Name { get; set; }
public string Email { get; set; }
//public SelectList DivisionList { get; private set; …Run Code Online (Sandbox Code Playgroud) 我浏览了StackOverflow并发现了几个问题/答案,但是我的情况并不准确.我跟着这个例子:
http://www.javascriptkit.com/javatutors/selectcontent2.shtml
我的JavaScript代码是这样的:
var cityList = document.selectionForm.cityListBox;
var cities = new Array();
cities[0] = "";
cities[1] = ["Eugene|eugeneValue", "Portland|portlandValue", "Salem|salemValue"];
cities[2] = ["Bellingham|bellinghamValue", "Onalaska|onalaskaValue", "Seattle| seattleValue"];
function updateCities(cityGroup)
{
cityList.options.length = 0;
if (cityGroup > 0)
{
for (i = 0; i < cities[cityGroup].length; i++)
{
cityList.options[cityList.options.length] = new Option(cities[cityGroup][i].split("|")[0], cities[cityGroup][i].split("|")[1]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的HTML代码如下:
<form name="selectionForm">
<select name="stateListBox" size="3" style="width: 150px" onchange="updateCities(this.selectedIndex);">
<option selected>Select a State >></option>
<option value="oregon">Oregon</option>
<option value="washington">Washington</option>
</select>
<select name="cityListBox" size="3" style="width: 150px" onclick="alert(this.options[this.options.selectedIndex].value);">
</select> …Run Code Online (Sandbox Code Playgroud) 我被要求查看一些ASP.Net MVC代码中的错误,并且(对我来说)SelectList有一个非常奇怪的问题.
来自控制器的代码生成项(返回SelectList的方法,总共有5个).然后将每个SelectList保存到ViewData集合中.
List<SelectListItem> items = new List<SelectListItem>();
string yesText = "Yes";
string noText = "No";
if (ci.LCID.Equals((int)LanguageCodes.FRANCE))
{
yesText = "Oui";
noText = "Non";
}
SelectListItem yesItem = new SelectListItem();
yesItem.Text = yesText;
yesItem.Value = ((int)MarketingBy.Yes).ToString();
yesItem.Selected = selectedValue != null && selectedValue.Equals(int.Parse(yesItem.Value));
SelectListItem noItem = new SelectListItem();
noItem.Text = noText;
noItem.Value = ((int)MarketingBy.No).ToString();
noItem.Selected = selectedValue != null && selectedValue.Equals(int.Parse(noItem.Value));
items.Add(yesItem);
items.Add(noItem);
return new SelectList(items, "Value", "Text", yesItem.Selected ? yesItem.Value : noItem.Value);
Run Code Online (Sandbox Code Playgroud)
在创建点快速"快速观察"表明一切正常: 选择列表生成http://i52.tinypic.com/x3hd3r.png
在渲染视图时,值仍然可以正常显示.但是,加载视图时,始终会选择列表中的第一个项目.生成的HTML是:
<tr> …Run Code Online (Sandbox Code Playgroud) 我的问题非常简单.假设我有一个用户下拉列表.在数据库中,我的用户表有3个字段:
user_id
user_name
user_firstname
Run Code Online (Sandbox Code Playgroud)
在我的MVC应用程序中,我想将这些用户链接到项目.这就是为什么我想要下拉列表.
现在,我希望有一个选择列表,ID为值,firstname和lastname为'text'
SelectList sl = new SelectList(users, "user_id", "user_name");
Run Code Online (Sandbox Code Playgroud)
现在我如何在文本中获得名字?这应该相当容易,但似乎不是......
我正在尝试构建一个包含一些优先级值的选择列表,然后是一个分隔符,然后是其余的值.我需要在Html Helper中执行此操作,因为我将获得优先级的值以及来自不同源的其余值.
我想要完成的样本:
EUR
GBP
USD
---
SEK
ZAR
.
.
.
Run Code Online (Sandbox Code Playgroud)
我还想确保无法选择分隔符.如果我直接在html中执行此操作,我已设法执行此操作,但在通过帮助程序执行此操作时,我无法禁用分隔符.任何想法如何做到这一点?
在MVC中,SelectList派生自MultiSelectList.我不能说出他们之间的区别.对于两者,我必须告诉它选择多个项目(我希望不必这样做,因为名称中有"multi").
如果在下面的代码中用"MultiSelectList"替换"SelectList",它将生成相同的HTML:
<%
var leftSelectList = new SelectList(Model.LeftSide,"Key","Value");
var attrs = new SortedDictionary<string, object> {{"class", "ui-widget"}};
MvcHtmlString disabledStyle = MvcHtmlString.Create(Html.Encode("'width:50px;'"));
attrs.Add("style", disabledStyle);
attrs.Add("multiple", "multiple");
attrs.Add("size", "5"); /*-- how many items to show--*/
var leftItems = Html.DropDownList("ddlLeftItems", leftSelectList, attrs); %>
<%= leftItems.ToHtmlString()%>
Run Code Online (Sandbox Code Playgroud)
生成的HTML是:
<select class="ui-widget" id="ddlLeftItems" multiple="multiple" name="ddlLeftItems" size="5" style="&#39;width:50px;&#39;">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
<option value="5">E</option>
<option value="9">I</option>
</select>
Run Code Online (Sandbox Code Playgroud)
那么,我应该使用哪一个?谢谢.
好的,这是我的问题.我试图填充@Html.DropDownListFor()我的角色减去Admin角色.这很好用,但它显示了所有角色:
@Html.DropDownListFor(m => m.RoleName, new SelectList(Roles.GetAllRoles()))
Run Code Online (Sandbox Code Playgroud)
然而,这显示了所有角色,包括Adminroll.
所以我UserHelper.cs用这个方法创建了另一个类,基本上是这样的Roles.GetAllRoles():
public string[] GetUserRoles()
{
string[] userroles = null;
using (MainVeinDataDataContext conn = new MainVeinDataDataContext())
{
userroles = (from r in conn.Roles
where r.Rolename != "Admin"
select r.Rolename).ToArray();
}
return userroles;
}
Run Code Online (Sandbox Code Playgroud)
但是,作为MVC的新手,我不知道如何将此方法公开给视图中的DropDownList.所以无论我尝试什么,这都行不通:
@Html.DropDownListFor(m => m.RoleName, new SelectList(GetUserRoles()))
Run Code Online (Sandbox Code Playgroud)
我不确定我错过了什么,这让我发疯.希望那里有人知道我错过了什么.
在我的MVC项目中,我遇到了将MultiSelectLists与我的Model属性绑定的问题.虽然我可以通过FormCollection对象获取值,但这些只是Selected ID.
以下是我的模型类,代表一个帖子.
public class PostModel
{
[Required(ErrorMessage = "Id is a required field")]
public int Id { get; set; }
[Required(ErrorMessage = "Post Title is required")]
[StringLength(500)]
public string Title { get; set; }
.......
public SelectList UnassignedTags { get; set; }
public SelectList AssignedTags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,这只是一个Model类,并且有两个附加属性(UnassignedTags和AssignedTags),仅用于在屏幕上显示它们以及保持调用之间的值绑定.
单个帖子可以标记多个标签.在我的视图中,我想要两个多选列表.一个用于保存未分配的标签(文本和值),另一个用于保存已分配的标签(文本和值).
在我的视图中,我使用以下代码显示这些列表的多选列表.
@Html.ListBox("UnassignedTagss", Model.UnassignedTags, new { @class = "form-control" })
@Html.ListBox("AssignedTagss", Model.AssignedTags, new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)
当我在屏幕上加载记录时,一切都很好.
加载后,我让用户通过javascript在列表之间移动项目.
当Form返回版本时会出现问题.我无法将Listbox值与我的模型属性绑定.
以下是我显示/编辑帖子记录的操作方法.
public ActionResult PostDtls(int postId)
{
….. …Run Code Online (Sandbox Code Playgroud) 我有一个选择的选项列表.我想立即让另一个选择列表包含相同的选项.
$('#list1 option').appendTo('#list2');
Run Code Online (Sandbox Code Playgroud)
上面的想法是正确的,但由于某种原因,它删除了我不想做的原始列表中的所有选项!有人能帮忙吗?谢谢
我使用以下代码重置IE中选择列表的选定索引:
$("#list")[0].selectedIndex = -1
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于FF和Chrome.任何人都可以告诉我实现这一目标的正确方法是什么?
无法将SelectListItem.Value属性从转换string为Boolean。如何创建一个简单的是/与价值无选项true/ false?
private List<SelectListItem> getYNOptions()
{
List<SelectListItem> yn = new List<SelectListItem>();
yn.Add(new SelectListItem() {
Text = "Yes",
Value=true, // error
Selected = false
});
yn.Add(new SelectListItem()
{
Text= "No",
Value = false, // error
Selected = false
});
return yn;
}
public ActionResult Index(){
ViewBag.selectList = getYNOptions();
return View();
}
Run Code Online (Sandbox Code Playgroud)
视图
@Html.DropDownListFor(model => model.YesOrNo, new SelectList(ViewBag.selectList,"Value","Text"), "-- Select --")
Run Code Online (Sandbox Code Playgroud) 我使用 viewbag 创建一个选择列表,我想显示连接在一起的两个字段。然而,它在我看来是崩溃的。这是查看包代码:
ViewBag.PackageId = new SelectList(db.Packages.Where(p => p.status == "A"), "u_package_id", "u_package_id" + "'-'" + "package_nme");
Run Code Online (Sandbox Code Playgroud) selectlist ×12
asp.net-mvc ×6
javascript ×3
c# ×2
html ×2
jquery ×2
firefox ×1
html-helper ×1
linq-to-sql ×1
model ×1
multi-select ×1
roleprovider ×1
viewbag ×1