0

我有一个编辑表单,它在文本框中有一个标签和当前值,我想检查提交表单时表单中的值是否已更改。这是表格

<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" });

}

}

4

2 回答 2

0

如果您使用类似Knockout的东西,那么在客户端是相当直接的。这是一篇描述如何使用 Knockout 进行更改跟踪的文章。本文使用了一个名为KoLite的 Knockout 插件来使其更加简单。

于 2013-07-19T15:14:48.683 回答
0

检查值是否已从其原始状态(服务器端)更改的一种方法是通过 HMAC 机制。

基本上它基于字符串和密钥生成一个哈希,并且这个哈希作为隐藏字段(http get)与表单一起发送,如果客户更改了值,那么重新计算哈希(http post)将不同于存储在隐藏字段中,那么您就知道有人更改了该字段的值。

这可能有点过度劳累,但却是最安全的方法之一。

https://security.stackexchange.com/questions/20129/how-when-do-i-use-hmac

如何在 C# 中生成 HMAC-SHA1?

于 2013-07-19T17:00:43.783 回答