未设置MVC隐藏字段

时间:2016-12-15 20:15:40

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

MVC相当新,所以我可能会遗漏一些东西

我有一个简单的视图,用于插入或更新模型。

模型类:

public class UserModel
{
    public Guid UserID { get; set; }

    [Required(ErrorMessage="Required")]
    [DisplayName("Email Address")]
    public string EmailAddress { get; set; }

    [Required(ErrorMessage = "Required")]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Required(ErrorMessage = "Required")]
    [DisplayName("Security Token")]
    public string SecurityToken { get; set; }
}

假设用户尚未提交此表单 - 我将UserID包含为隐藏表单元素。这是我的观点

@using (Html.BeginForm("Configure", "Home"))
{
    @Html.HiddenFor(Model => Model.UserID)
    @Html.LabelFor(Model => Model.EmailAddress) 
    @Html.TextBoxFor(Model => Model.EmailAddress) @Html.ValidationMessageFor(m => m.EmailAddress)
    @Html.LabelFor(Model => Model.Password)
    @Html.EditorFor(Model => Model.Password) @Html.ValidationMessageFor(m => m.Password)
    @Html.LabelFor(Model => Model.SecurityToken)
    @Html.TextBoxFor(Model => Model.SecurityToken) @Html.ValidationMessageFor(m => m.SecurityToken)
    <p><input type="submit" id="setupSalesforce" value="Save" /></p>
}

在我的业务层类中,我检查是否设置了Model.UserID,如果是,那么这是一个更新,如果没有设置,这是一个插入。

我的问题是,在插入数据之后,当再次生成视图时,隐藏字段不会使用model.UserID中的Guid更新,因此它保留为默认Guid,因此如果我想更新该记录我不能因为没有设置Guid。

我已经完成了我的Controller方法

[HttpPost]
public ActionResult Configure(Models.SalesforceUserModel model)
{
    var businessLayerFunctions = new BL.Functions();
    bool success = businessLayerFunctions.InsertOrUpdateUser(model);
    return View(model);
}

模型具有UserID设置。它不会被写入隐藏元素。

这是get方法 - 但是在保存(我相信)

之后不会运行
public ActionResult Configure()
{
    var businessLayerFunctions = new BL.Functions();
    var model = businessLayerFunctions.GetUserModel();
    return View(model);
}

2 个答案:

答案 0 :(得分:2)

这可能会帮助我找到Html.Hidden field not getting set的结果。

将POST方法更改为

[HttpPost]
public ActionResult Configure(Models.SalesforceUserModel model)
{
    var businessLayerFunctions = new BL.Functions();
    bool success = businessLayerFunctions.InsertOrUpdateUser(model);
    ModelState.Remove("UserID")
    return View(model);
}

您可能必须在ModelState.Remove

之后再次填充模型

答案 1 :(得分:-1)

视图中的第一行是否声明了模型?应该是这样的:

@model mynamespace.UserModel