asp.net mvc中的隐藏字段

时间:2016-03-09 08:59:14

标签: c# asp.net-mvc

我的模型有一些字段不会在视图中显示(如Id字段)。

因此,当我发布表单时,这些字段将返回“null”值,除非我在表单中插入隐藏字段。

还有另一个更新模型,只使用表单中的字段吗?

我的实际代码:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Profissao model)
{
    if (ModelState.IsValid)
    {
        using (var escopo = Db.Database.BeginTransaction())
        {
            try
            {
                if (model.Id == 0)
                    Db.Profissoes.Add(model);
                else
                    Db.Profissoes.Update(model);

                Db.SaveChanges();
                escopo.Commit();

                return RedirectToAction("Index");
            }
            catch (Exception)
            {
                escopo.Rollback();
            }
        }                
    }

    return View(model);
}

1 个答案:

答案 0 :(得分:2)

您应该使用Dto(数据传输对象)来处理此问题。

public class User
{
    public string Name { get; set; }

    public string Passord { get; set; }

    public  string Email { get; set; }
}


public class UserDto
{
    public string Name { get; set; }

    public string Passord { get; set; }

    public string Email { get; set; }

    public UserDto FromModel(User user)
    {
        Name = user.Name;
        Passord = user.Passord;
        Email = user.Email;
        return this;
    }

    public User UpdataModel(User user)
    {
        user.Name = Name;
        user.Email = Email;

        return user;
    }
}

然后您可以将Dto对象传递给您的视图和帖子。

你的帖子控制器应该看起来像

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(ProfissaoDto model)
{
    if (ModelState.IsValid)
    {
        using (var escopo = Db.Database.BeginTransaction())
        {
            try
            {
                if (model.Id == 0)
                    Db.Profissoes.Add(ProfissaoDto.UpdateModel(new Profissao()));
                else
var model = Db.Profissao.find(Model.id);

                    Db.Profissoes.Update(ProfissaoDto.UpdateModel(model));

                escopo.Commit();
                return RedirectToAction("Index");
            }
            catch (Exception)
            {
                escopo.Rollback();
            }

        }                
    }
    return View(model);
}