POST

时间:2015-06-05 16:57:11

标签: c# asp.net-mvc asp.net-mvc-4

我是MVC的新手,我遇到了在页面POST上持久保存值的问题。下面是我想要做的简化版本。基本上我有一个表单,我显示用户名和其他详细信息。在POST ActionResult上,如果业务规则失败,页面应返回到当前视图,否则将继续,但在我的POST上,我在GET中设置的名称和地址不会出现在视图模型的POST中,导致发送空值返回视图(模型)。有没有办法可以持久保存值而无需返回数据库来检索它们?

模型

public class HomeModel
{
    public string Forename { get; set; }
    public string Surname { get; set; }
    public string AddressLine1 { get; set; }
    public bool Continue { get; set; }
}

控制器

[HttpGet]
public ActionResult Index()
{
    var model = new HomeModel();
    model.Forename = "Joe";
    model.Surname = "Boe";
    model.AddressLine1 = "Unknown";

    return View(model);
}

[HttpPost]
public ActionResult Index(HomeModel homeModel)
{
    if (homeModel.Continue)
        return RedirectToAction("Index", "Form2");
   else
        return View(homeModel);
}

查看

 @using (Html.BeginForm())
    {
        @Html.LabelFor(m => m.Forename, Model.Forename)<br />
        @Html.LabelFor(m => m.Surname, Model.Surname)<br />
        @Html.LabelFor(m => m.AddressLine1, Model.AddressLine1)<br /><br />
        @Html.CheckBoxFor(m => m.Continue)<br /><br />
        <input type="submit" value="Click" />
    }

2 个答案:

答案 0 :(得分:3)

LabelFor不会创建HTML input类型,因此它不会包含在回发中。您可以将它们设为TextBoxFor,或在标签旁边创建HiddenFor,以便它们可以保留回服务器

答案 1 :(得分:1)

您可以使用隐藏字段:

 @Html.HiddenFor(model => model.ID)

然后将该值发回服务器。这将增加帖子的数据量,对于大型表格是不可取的。

也就是说,您可能最好重建页面加载数据或执行服务器端缓存,否则您将面临输入错误数据的风险。如果只读它,那对你来说可能无关紧要。