我有一个外部列表,其中包含一个名为"CostPerUnit"的项目。此字段已经设置了一个值,我正在尝试使用以下代码更改其值:
private void updateCost(int orderIndex, decimal cost)
{
SPContext.Current.Web.AllowUnsafeUpdates = true;
SPListItem item = SPContext.Current.Web.Lists[CListNames.ORDERS].Items[orderIndex];
item["CostPerUnit"] = cost;
item.Update();
SPContext.Current.Web.AllowUnsafeUpdates = false;
}
当我调用"项目。Update()",碰巧在调用我的更新程序方法之前,Sharepoint 正在调用 ReadItem(特定查找器),它用数据库中的原始值覆盖整个列表项。以下是我的特定查找器和更新程序方法:
public static TB_ORDER ReadItem(int id, decimal costPerUnit, string comments)
{
OT_MODEL_DALDataContext dataContext = new OT_MODEL_DALDataContext(_ConnectionString);
TB_ORDER Order = (from order in dataContext.TB_ORDERs.AsEnumerable() where order.Id == id select order).Single();
return Order;
}
public static void Update(TB_ORDER order)
{
OT_MODEL_DALDataContext dataContext = new OT_MODEL_DALDataContext(_ConnectionString);
var Order = (from orders in dataContext.TB_ORDERs
where orders.Id == order.Id
select orders).Single();
Order.Comments= order.Comments;
Order.CostPerUnit = order.CostPerUnit;
dataContext.SubmitChanges();
}
传递给更新程序方法的"订单"项是由特定的查找器方法检索到的项,因此对该项所做的更改将丢失,并且不会提交到 de Database。
*更新*我的问题是:如何防止 SharePoint 在调用更新程序方法之前用其原始值重写 ItemList?
任何帮助将不胜感激。提前谢谢。
我刚刚为我的项目编写了一些代码来更新 SharePoint 列表项字段,它可以工作:
<script type="text/javascript" src="/jquery-1.10.2.min.js"></script>
<script src="https:///jquery.SPServices-2013.02a.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () { ExecuteOrDelayUntilScriptLoaded(loadConstants, "sp.js"); });
function loadConstants() {
//get item id from url
var docurl = document.URL;
var beginindex = docurl.indexOf('?ID=') + 4;
var endindex = docurl.indexOf('&Source=');
var itemid = docurl.substring(beginindex, endindex);
var ctx = new SP.ClientContext("your site url");
var oList = ctx.get_web().get_lists().getByTitle('your list name');
this.oListItem = oList.getItemById(itemid);
ctx.load(this.oListItem);
ctx.executeQueryAsync(Function.createDelegate(this, function () {
this.oListItem.set_item('Column name', "New value");
this.oListItem.update();
ctx.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}), function (sender, args) { alert('Error occured' + args.get_message());});
}
function onError(error) {
alert("error");
}
}
</script>
我希望它有所帮助!