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);
}
答案 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