从TextBox更改为DropDownList

时间:2012-08-22 08:11:18

标签: c# asp.net-mvc-3 razor

我的应用程序有一个自定义成员资格,它与通用成员几乎相同。在其他细节中,不同的是我如何将值传递给我的Register post方法。

到目前为止,我的方法参数中有用户名,密码,firstName,...,状态,全部为字符串(对问题而言更多但不相关),如下所示:

public ActionResult Register(string userName, string password, string confirmPassword, string firstName, string lastName, string address, string city, string state, string zip)

手头的问题是State参数,现在我希望它从下拉列表中传递,而不是像目前一​​样从文本框传递。

我已经为下拉列表制作了一个模型。

public class State
{
    public int StateID { get; set; }
    public string StateName { get; set; }
}

并在我的SelectList方法中添加了适当的Register View

public ActionResult Register()
{
    ViewBag.StateID = new SelectList(db.States, "StateID", "StateName");
    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

    return View();
}

然后我更改了Register View,并制作了一个下拉菜单,而不是Html.TextBoxFor帮助程序。

@Html.DropDownList("StateID", (SelectList)ViewBag.StateID, new { @class = "ddl" })

请注意,除usernamepassword之外的所有这些参数都保存在User Profile属性中。这就是在Register post方法中完成的工作。

ProfileBase _userProfile = ProfileBase.Create(userName);

_userProfile.SetPropertyValue("FirstName", firstName);
_userProfile.SetPropertyValue("LastName", lastName);
_userProfile.SetPropertyValue("Address", address);
_userProfile.SetPropertyValue("City", city);
_userProfile.SetPropertyValue("State", state);
_userProfile.SetPropertyValue("Zip", zip);

_userProfile.Save();

最后,问题是它没有得到保存。该用户State的{​​{1}}属性为空。

到目前为止,我已经尝试了几个想法,但没有。

2 个答案:

答案 0 :(得分:2)

下拉列表应与您要映射到的参数具有相同的名称。看起来它的id是“StateID”,但它应该是“state”(作为参数的名称)。

所以它应该是:

@Html.DropDownList("State", (SelectList)ViewBag.StateID, new { @class = "ddl" }) 

答案 1 :(得分:1)

问题是您在操作中尝试映射的参数的下拉列表中使用了不同的名称。

如果你进行了两场比赛,那么这应该有助于解决你的问题。

所以你应该把它改成:

  @Html.DropDownList("State", (SelectList)ViewBag.StateID, new { @class = "ddl" })

希望这有帮助。