1

我有一个令人尴尬的失控问题。

我正在使用 MVC 和 EF,并且有一个用户可以编辑的模型。我刚刚有一个新的要求,如果它被编辑,被编辑的属性应该在视图中显示为红色,以供其他用户查看。

我的模型有很多属性,但是主键是a GUID,模型可以有多个parentIDs。因此,对于一个给定的GUIDParentID我想找出哪些属性已更改。

到目前为止,感觉不对,我认为我有一些 jquery 可以执行以下操作

$("[name*='Request.']")
        .not(":hidden")
        .each(function () {
            var $this = $(this);
            $.ajax({
                url: '@Url.Action("IsChanged", "Shared")',
                data: { fieldName: $this.attr("name"), parentID: @Model.Request.ID },
                success: function (data) {
                    if (data) {
                        if ($this.is(":radio")) {
                            $this.parent().addClass("isChanged");
                        } else
                            $this.addClass("isChanged");
                    }
                }
            });
        });

如果我尝试简单地从我的 ajax 函数返回 true,则此脚本工作正常。但是,问题出在 ajax 函数上。如何找到更改?到目前为止,我得到的是:

public ActionResult IsChanged(string fieldName, int parentID)
    {
        using (MyEntities _db = new MyEntities())
        {
            string[] aName = fieldName.Split('.');

            // Count the number of version
            int versionCount = _db.SubRequests.Count(r => r.ParentID == parentID);
            // Get the first version
            SubRequest sr = _db.SubRequests.FirstOrDefault(r => r.ParentID == parentID);
            // Check if the count is the same for the specific value
            int changeCount = _db.ExecuteStoreQuery<int>("select count(parentID) from "+aName[0]+" where parentID = " + parentID + " and " + aName[1] +"='{0}'", THEVALUEINORIGINAL);


            bool isChanged = changeCount == versionCount;

            return Json(isChanged, JsonRequestBehavior.AllowGet);
        }
    }

到目前为止我所做的感觉不对,显然这不起作用,但我迷路了。

让我知道这是否可以理解,或者您是否需要更多信息。我应该放弃这个想法并构建一些完全不同的东西(可能),还是有办法拯救我?

4

2 回答 2

0

看起来您可能想看看如何正确处理并发冲突。看看这篇文章。

于 2012-06-26T19:00:34.840 回答
0

我确信这不是最漂亮的方法,但我想我最终会分享我最终决定的解决方案,以防其他人想要做类似的事情。

我的 jQuery ajax 函数保持不变,但在控制器中我有以下内容:

public ActionResult IsChanged(string fieldName, int parentID)
{
    using (MyEntities _db = new MyEntities())
    {
        bool isChanged = false; 

            string[] aName = fieldName.Split('.');

            string strTableName = aName[0];
            string strFieldName = aName[1];

            string strQuery = String.Format("select distinct {0} from {1} where parentID = {2}", strFieldName, strTableName, parentID);

            isChanged = _db.ExecuteStoreQuery<dynamic>(strQuery).Count() > 1;

            return Json(isChanged, JsonRequestBehavior.AllowGet);
    }
}

对我来说很好。但是,它是一个非常繁重的加载页面,包含所有这些 ajax 调用。

于 2012-06-28T14:52:13.430 回答