2012-07-18 68 views
1

嗨,大家好我有一个看起来像这样如何将列绑定到DropDownList并获取MVC3中的选定值?

  usertable         RoleTable 
    -----------------------      --------------------------- 
    UserID|UserName|Pwd|RoleID      RoleID|RoleName 
    1 |Anil |123|1        1 |Admin 

现在我在表中显示,在那里他有一个AddNew链接的用户表,当的AddNew联系管理员点击我会告诉他的AddNew页面,两个表他有一些标签和文本框AddNew用户,

现在我想要做的是在AddNew页面我想在DropDown中显示所有RoleNames,以便管理员可以选择用户必须在哪个角色.. ..and我想要检索选定的数据

这是我的模型类

  public class ResourceModel 
{ 
    public static List<ResourceModel> GetList { get; set; } 
    public Int16 EmployeeId { get; set; } 
    public string EmployeeName { get; set; } 
    public string EmployeeEmailId { get; set;} 
    public string GroupName { get; set; } 
    public string EmployeePassword { get; set; } 

} 

这是我的控制器

  [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult AddNew() 
    { 

     ViewBag.Roles = new SelectList(GetRoles(),"RoleID","RoleName");   
     return View(); 
    } 
    // 
    //Geting All Roles In a GetRoles()/ 
    // 
     public static GetRoles() 
     { 

     SqlConnection conn = new SqlConnection("Data Source=LMIT-0039;Initial Catalog=BugTracker;Integrated Security=True"); 
     SqlCommand Cmd = new SqlCommand("Select GroupId,EmplopyeeRole from EmployeeGroup", conn); 
     conn.Open(); 
     SqlDataAdapter da = new SqlDataAdapter(Cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
     { 
      //roles.Add(new SelectListItem{.Value=i,.Text=i};     
      var model = new ResourceModel(); 
      model.RoleId = Convert.ToInt16(ds.Tables[0].Rows[i]["GroupId"]); 
      model.RoleName = ds.Tables[0].Rows[i]["EmplopyeeRole"].ToString(); 
      //roles.Value=Convert.ToString(model.RoleId); 
      //roles.Text=model.RoleName; 
     } 
     conn.Close(); 
      return ds ; 
     } 

我有什么在上面的代码

这是我的AddNew aspx页面

 <div> 
    <% using (Html.BeginForm()) 
    { %> 
    <%-- <form action="Create.aspx" method="post"></form>--%> 
    <%:Html.ValidationSummary(true)%> 
    <fieldset> 
    <legend style="color:Orange; font-weight:bolder;">AddNew Project</legend> 

    <div class="editor-label" style="color:Orange; font-weight:bolder;"> 
     <%: Html.LabelFor(model => model.EmployeeName)%> 
    </div> 
    <div class="editor-field"> 
     <%:Html.EditorFor(model => model.EmployeeName)%> 
     <%: Html.ValidationMessageFor(model => model.EmployeeName)%> 
    </div> 

    <div class="editor-label" style="color:Orange; font-weight:bolder;"> 
     <%:Html.LabelFor(model => model.EmployeeEmailId)%> 
    </div> 
    <div class="editor-field"> 
     <%:Html.EditorFor(model => model.EmployeeEmailId)%> 
     <%:Html.ValidationMessageFor(model => model.EmployeeEmailId)%> 
    </div> 
    <div class="editor-label" style="color:Orange; font-weight:bolder;"> 
    <%:Html.LabelFor(model => model.EmployeePassword)%> 
    </div> 
    <div class="editor-field"> 
    <%:Html.EditorFor(model => model.EmployeePassword)%> 
    <%:Html.ValidationMessageFor(model => model.EmployeePassword)%> 
    </div> 
     <div class="editor-label" style="color:Orange; font-weight:bolder;"> 
    <%:Html.LabelFor(model => model.GroupName)%> 
    </div> 
    <div class="editor-field"> 
    <%:Html.EditorFor(model => model.GroupName)%> 
    <%:Html.ValidationMessageFor(model => model.GroupName)%> 
    <p> 
     <input type="submit" value="Create" style="color:Orange; font-weight:bolder;"/> 
    </p> 
    </fieldset> 
    <%} %>   
    </div> 

任何一个可以帮助我恢复这样做,请在MVC3 ....我必须显示RoleNames在DropDown我必须retreive选择在我的[AcceptVerbs(HttpVerbs.Post)]中的值控制器....任何想法,请

我有一个存储程序为本人的[AcceptVerbs(HttpVerbs.Post)]其中与所选择的下拉值i将插入ROLENAME的角色ID以dB

 Create Procedure InsertEmplyoee 
     (
     @EmployeeName varchar(50), 
     @EmployeeEmailId varchar(50), 
     @EmployeePassword varchar (50), 
     @GroupName varchar (50) 
     ) 
     as 
     begin 
     insert into EmployeeDetails (EmployeeName,EmployeeEmailId,EmployeePassword,GroupId) values 
    (@EmployeeName,@EmployeeEmailId,@EmployeePassword,(select GroupId from EmployeeGroup where [email protected])) 

结束 去

+0

伙计们可以帮我在这里请.......... – SoftwareNerd 2012-07-19 04:29:01

回答

0

让您获取动作就像这样:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult AddNew() 
{ 
     ViewBag.RoleId = new SelectList(GetRoles(), "RoleID", "RoleName"); 
     return View(); 
} 

GetRoles应返回Role

列表您认为:

@Html.DropDownList("RoleId") 

编辑:解释

Html.DropDownList方法将搜索ViewBagViewData实际上)为SelectListItem名称为RoleId一个列表并使用该下拉列表。您不需要自己明确指定列表。

编辑:纠正GetRoles

GetRoles方法应该是这样的:

public static List<Role> GetRoles() { 
    SqlConnection conn = new SqlConnection("Data Source=LMIT-0039;Initial Catalog=BugTracker;Integrated Security=True"); 
    SqlCommand Cmd = new SqlCommand("Select GroupId,EmplopyeeRole from EmployeeGroup", conn); 
    conn.Open(); 
    SqlDataAdapter da = new SqlDataAdapter(Cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    List<Role> allRoles = new List<Role>(); 
    for(int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) { 
     Role role = new Role { 
      RoleId = Convert.ToInt16(ds.Tables[0].Rows[i]["GroupId"]), 
      RoleName = ds.Tables[0].Rows[i]["EmplopyeeRole"].ToString() 
     }; 

     allRoles.Add(role); 
    } 
    conn.Close(); 
    return allRoles; 
} 

我一直与EntityFramework工作。你为什么不去那个或其他ORM?

+0

@ Mohayemin..do我必须在我的GetRoles()方法中声明RoleId,RoleName – SoftwareNerd 2012-07-19 04:32:29

+0

@anilkumar:只需返回在'GetRoles()'方法中来自数据库的所有'Role'。你的'Role'类具有'RoleId'和'RoleName',不是吗? – Mohayemin 2012-07-19 04:36:31

+0

@ Mohayemin ..我在我的班上有一个他们,但在下拉列表中我是空的 – SoftwareNerd 2012-07-19 04:42:58

1

想想你将如何去POST选定的角色id回到服务器。

而不是public static List<ResourceModel> GetList { get; set; }使用 public int RoleId {get;set;}。你不能为List<T>创建一个@Html.DropDownListFor,这是没有意义的,你只是发布一个单一的值。

接下来在您的模型中创建一个返回IEnumerableSelectListItem的方法。

public static IEnumerable<SelectListItem> GetRoles() 
    { 
     var roles = //However you plan to get this data from db 
     return roles.Select(o => new SelectListItem 
            { 
             Value = o.RoleID, 
             Text = o.RoleName 
            }); 
    } 

终于在自己的看法:

@Html.DropDownListFor(x=> x.RoleId, ResourceModel.GetRoles())

相关问题