0

从提交返回后如何保留下拉列表的值?

我有以下结构。

在控制器上:

[HttpPost]
public ActionResult Cadastro(CadastroViewModel viewModel)
{
    try
    {
        var usuario = Mapper.Map<CadastroViewModel, Usuario>(viewModel);
        servicoDeAplicacaoDeUsuario.Inserir(usuario);
    }
    catch (ValidationException validationException)
    {
        this.ModelState.Clear();
        foreach (var error in validationException.Errors)
            this.ModelState.AddModelError(error.PropertyName, error.ErrorMessage);

        return View("Cadastro", viewModel);
    }

    return RedirectToAction("Index", "Home");
}

所以上面它会返回一些验证错误,但是viewModel没有填充列表(下拉)要返回。

@using (Html.BeginForm("Cadastro", "Cadastro", FormMethod.Post))
{
    <ul class="login-signup-list">
        <li>
            @Html.TextBoxFor(f => f.NomeCompleto, new { @class = "span10", autofocus = "autofocus", placeholder = RecursoDeCadastro.NomeCompleto, maxlength = 100 })
        </li>
        <li>
            @Html.TextBoxFor(f => f.Email, new { @class = "span10", type="email", placeholder = RecursoDeCadastro.Email, maxlength = 100 })
        </li>
        <li>
            @Html.TextBoxFor(f => f.Senha, new { @class = "span10", type="password", placeholder = RecursoDeCadastro.Senha, maxlength = 50 })
        </li>
        <li>
            @Html.DropDownListFor(m => m.IdPais, new SelectList(Model.Paises, "Id", "Nome"), new { @class = "span10" } )
        </li>
        <li>
            @Html.DropDownListFor(m => m.IdUF, new SelectList(Model.UFs, "Id", "Nome"), new { @class = "span10" } )
        </li>
        <li>                    
            @Html.DropDownListFor(m => m.IdMunicipio, new SelectList(Model.Municipios, "Id", "Nome"), new { @class = "span10" } )
        </li>
        <li>
            <button class="btn btn-primary">@RecursoDeCadastro.CriarConta</button>
        </li>
// ... ?
}

我可以再次从数据库中获取每个列表,并使用发布时 viewModel 附带的 Id(例如,IdUF)设置它的值,因为我只丢失了列表。但我认为没有必要再次请求数据库。

有解决方法吗?我可以通过登录用户使用会话吗?如何?

谢谢。

威尔顿·鲁法托·沃拉斯

4

0 回答 0