我的应用程序有一个自定义成员资格,它与通用成员几乎相同。在其他细节中,不同的是我如何将值传递给我的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" })
请注意,除username
和password
之外的所有这些参数都保存在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}}属性为空。
到目前为止,我已经尝试了几个想法,但没有。
答案 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" })
希望这有帮助。