下拉列表 - MVC3 [英] Dropdown list - MVC3

查看:104
本文介绍了下拉列表 - MVC3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用C#在ASP MVC3。我从SQL Server.Table名称 SMS_User SMS_Division 两个表在SQL Server 2008中,当我创建一个新的用户,我想表明从sms_division表分区ID。

SMS_User 包含用户名 DivisionID EmailAddress的

SMS_Division 包含 DivisionID DivisionName

控制器code:

  UserController中:控制器
{
   私人NetPerfMonEntities2 DB =新NetPerfMonEntities2();
   IEnumerableZamZam = db.SMS_Division.Select(C =>新建SelectListItem {值= c.divisionid.ToString(),文本= c.divisionid.ToString()});
}

当我创造用户新用户创建()查看我想显示DivisonName作为一个下拉列表,而不是一个文本框。我该怎么办?

  @ Html.DropDownListFor(型号=> model.divisionid,(IEnumerable的< SelectListItem>)计算机[分区],<  - 选择divison  - > )
@ Html.ValidationMessageFor(型号=> model.divisionid)

我有这样的错误消息:

  CS0103:名称'sms_amountlimit2'不在目前情况下存在


解决方案

我会承担我的回答你的问题的一些缺失的部分,并给你一个通用的模式在ASP.NET MVC工作下拉列表3:

让我们先从车型:

的usermodel将是重类presenting从 sms_user

提取数据

 公共类的usermodel
{
   公共字符串用户名{获得;组; }
   公共字符串EmailAddress的{搞定;组; }
   公众诠释DivisionId {搞定;组; }
}

DivisionModel将是重类presenting从 sms_division

提取数据

 公共类DivisionModel
{
   公众诠释DivisionId {搞定;组; }
   公共字符串DivisionName {搞定;组; }
}

抽取出,我的意思是什么,可以在实例化类的变换数据库中的数据。这可以是一个ORM(的EntityFramework或其他人),或SQL查询等...

其次,是视图模型,因为它是没有意义插上的usermodel部门的IEnumerable,我个人真的不喜欢使用的ViewData时,我能避免它:

 公共类UserViewModel
{
   公众的usermodel用户{搞定;组; }
   公共IEnumerable的< D​​ivisionModel> {分部获得;组;}
}

接下来,控制器:

 公共类UserController的:控制器
{
   公众的ActionResult的Create()
   {
      清单< D​​ivisionModel>师=新的List< D​​ivisionModel>();
      divisions.Add(新DivisionModel(){DivisionId = 1,DivisionName =Division1});
      divisions.Add(新DivisionModel(){DivisionId = 2,DivisionName =Division2});      用户的usermodel =新的usermodel(){用户名=为testUser,EmailAddress的=testAddress@test.com};      返回查看(新UserViewModel(){USER =用户,师师=});
   }
}

我刚刚创建的分区列表和用户,但你会从你的数据库获得再以任何方式所使用。

最后查看:

  @model ViewModels.UserViewModel
@ {
    ViewBag.Title =创建;
}< H2>创建< / H>
&所述p为H.;
@ Html.DropDownListFor(型号=> model.User.DivisionId,新的SelectList(Model.Divisions,DivisionId,DivisionName), - 选择事业部 - )
@ Html.ValidationMessageFor(型号=> model.User.DivisionId)
&所述; / P>

注意绑定到视图模型是视图模型。

I am using C# in ASP MVC3. I have two tables from SQL Server.Table names are SMS_User and SMS_Division in SQL Server 2008. When i create a new user, I want to show division id from sms_division table.

SMS_User contains UserName, DivisionID, EmailAddress

SMS_Division contains DivisionID, DivisionName.

Controller Code :

UserController : Controller
{
   private NetPerfMonEntities2 db = new NetPerfMonEntities2(); 
   IEnumerableZamZam= db.SMS_Division.Select(c => new SelectListItem { Value = c.divisionid.ToString(), Text = c.divisionid.ToString() } );
}

When I create a new user in User Create() VIEW I want to show a DivisonName as a dropdown list instead of a text box. How I do that ?

@Html.DropDownListFor(model => model.divisionid, (IEnumerable<SelectListItem>) ViewData["Divisions"], "<--Select a divison-->") 
@Html.ValidationMessageFor(model => model.divisionid) 

I have this error message :

CS0103: The name 'sms_amountlimit2' does not exist in the current context

解决方案

I'll be assuming a few missing part of your question in my answer, and give you a generic pattern to have a working dropdown list in ASP.NET MVC 3 :

Let's start with the models :

UserModel would be the class representing the data extracted from sms_user

public class UserModel
{
   public string Username { get; set; }
   public string EmailAddress { get; set; }
   public int DivisionId { get; set; }
}

DivisionModel would be the class representing the data extracted from sms_division

public class DivisionModel
{
   public int DivisionId { get; set; }
   public string DivisionName { get; set; }
}

By Extracted, I mean anything that can transform the data in your Database in instanciated classes. That can be an ORM (EntityFramework or others), or SQL Queries, etc...

Next, is the viewmodel, because it wouldn't make sense to plug an IEnumerable of divisions in UserModel, and I personally don't really like using ViewData when I can avoid it :

public class UserViewModel
{
   public UserModel User { get; set; }
   public IEnumerable<DivisionModel> Divisions {get; set;}
}

Next, the controller :

public class UserController : Controller
{
   public ActionResult Create()
   {
      List<DivisionModel> divisions = new List<DivisionModel>();
      divisions.Add(new DivisionModel() { DivisionId = 1, DivisionName = "Division1" });
      divisions.Add(new DivisionModel() { DivisionId = 2, DivisionName = "Division2" });

      UserModel user = new UserModel() { Username = "testUser", EmailAddress = "testAddress@test.com" };

      return View(new UserViewModel() { User = user, Divisions = divisions });
   }
}

I just create the Division list and the user, but you would get then from you database by any means you are using.

And finally the View :

@model ViewModels.UserViewModel
@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>
<p>
@Html.DropDownListFor(model => model.User.DivisionId, new SelectList(Model.Divisions, "DivisionId", "DivisionName"),  "-- Select Division --") 
@Html.ValidationMessageFor(model => model.User.DivisionId)  
</p>

Note that the model binded to the view is the ViewModel.

这篇关于下拉列表 - MVC3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆