这看起来很糟糕。该怎么做? Asp.Net MVC和Dropdown

时间:2011-01-04 06:37:44

标签: c# asp.net-mvc-2 drop-down-menu

我正在学习MVC并在我的新用户注册表单中使用我的MVC应用程序中的DropDown。

对于我的大多数屏幕,我有两种控制器方法。一个用于GET(屏幕的初始显示),一个用于POST(当用户单击“提交”按钮时)。

以下是代码:

        public ActionResult UserRegistration()
    {
        SelectList list = new SelectList(SiteUserRepository.GetTimezones(), "timezone_id", "location");
        ViewData["timezones"] = list;
        return View();
    }

    [HttpPost]
    public ActionResult UserRegistration(SiteUserModels.SiteUserRegistrationModel model)
    {
        if (ModelState.IsValid)
        {
            SiteUserRepository.CreateUser(model.username, model.email, model.password, model.firstname, model.firstname, model.timezone_id);
            return RedirectToAction("Index", "Home");
        }
        SelectList list = new SelectList(SiteUserRepository.GetTimezones(), "timezone_id", "location");
        ViewData["timezones"] = list;
        return View();
    }

请注意,我正在复制和发布代码。正在复制下拉代码(SelectList)。我发现ViewData仅适用于初始请求,因此我需要为Post重做它(如果用户输入了无效数据,则返回屏幕..)

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

在你的情况下,返回非post post的ActionResult应该没问题。

[HttpPost]
public ActionResult UserRegistration(SiteUserModels.SiteUserRegistrationModel model)
{
    if (ModelState.IsValid)
    {
        SiteUserRepository.CreateUser(model.username, model.email, model.password, model.firstname, model.firstname, model.timezone_id);
        return RedirectToAction("Index", "Home");
    }
    return UserRegistration();
}

通常,您希望通过其他数据向View提供一些错误报告。在这种情况下,您将SelectList创建重构为一个单独的方法以避免冗余。