我有一个编辑表单,在文本框中有一个标签和当前值,我想检查表单中的值是否已在提交表单时更改。 这是表格
<fieldset>
<legend>Module <small>Edit</small></legend>
@using (Html.BeginForm("Edit", "Module"))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(m=>m.Id)
for(var i = 0; i < Model.Properties.Count(); i++)
{
<label class="label">@Model.Properties[i].Name</label>
<div class="input-block-level">@Html.TextBoxFor(model => Model.Properties[i].Value, new { @value = Model.Properties[i].Value })</div>
}
<div class="form-actions" id="buttons">
<button type="submit" class="btn btn-primary" id="Submit">Save changes</button>
@Html.ActionLink("Cancel", "ModuleList", null, new { @class = "btn " })
</div>
}
</fieldset>
结果
如何检查表单是否已更改?我的控制器的httppost方法目前看起来像这样
[HttpPost]
public ActionResult Edit(EditModule module)
{
if (ModelState.IsValid)
{
_repository.SaveModuleEdits(module);
Information("Module was successfully edited!");
return RedirectToAction("ModuleList", "Module", new {area = "Hardware"});
}
Error("Edit was unsuccessful, if the problem persists please contact admin!");
return RedirectToAction("ModuleList", "Module", new { area = "Hardware" });
}
}
答案 0 :(得分:0)
如果您使用Knockout之类的内容,则在客户端方面相当直接。这是一个article that describes how to use Knockout for change tracking。本文使用名为KoLite的Knockout加载项使其更简单。
答案 1 :(得分:0)
检查值是否已从其原始状态(服务器端)更改的一种方法是通过HMAC机制。
基本上它会根据字符串和密钥生成散列,并且此散列与表单一起作为隐藏字段(http get
)发送,如果客户更改了值,则重新计算hash(http post
)将与隐藏字段中存储的内容不同,然后您知道有人更改了该字段的值。
这可能有点过度劳累,但却是最安全的方法之一。
https://security.stackexchange.com/questions/20129/how-when-do-i-use-hmac