我有一个显示警报列表的ajax绑定网格.基于行对象中的某些条件,我需要更改行的颜色.这之前,当我的网格是服务器绑定时(我知道这是它应该工作的方式),但由于更改,网格需要使用ajax更新.这是我的网格,以及服务器绑定时的工作原理(注意我已更改为.Ajax():
@(Html.Kendo().Grid(Model.Alarms)
.Name("grid")
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(m => m.Id(s => s.AlarmComment))
.Read(read => read.Action("Alarms_Read", "Alarms", new { id = Model.ViewUnitContract.Id }).Type(HttpVerbs.Get))
.AutoSync(true)
.ServerOperation(true)
)
.RowAction(row =>
{
if (row.DataItem.DateOff == null && row.DataItem.DateAck == null)
{
row.HtmlAttributes["style"] = "backgrcolor:red";
}
if (row.DataItem.DateOff != null && row.DataItem.DateAck == null)
{
row.HtmlAttributes["style"] = "color: green";
}
if (row.DataItem.DateOff == null && row.DataItem.DateAck != null)
{
row.HtmlAttributes["style"] = "color: blue";
}
})
.Columns(col =>
{
col.Bound(p => p.DateOn).Format("{0:u}").Title("Date");
col.Bound(p …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 asp.net mvc 项目,在该项目中我使用了一个填充有模型的网格。但是,我在尝试在网格中创建新记录时遇到错误,说Uncaught ReferenceError: CustomerContract is not defined.
这是我的网格和模板:
<script type="text/kendo" id="customerTemplate">
#if(data != null){#
#:data.Name#
#}#
</script>
<script type="text/javascript">
var customerTemplate = kendo.template($("#customerTemplate").html(), { useWithBlock: false });
</script>
@(Html.Kendo().Grid<ProjectModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Name);
columns.Bound(p => p.CustomerContract).ClientTemplate("#:customerTemplate(CustomerContract)#");
columns.Command(command =>
{
command.Edit();
command.Destroy();
}).Width(180);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("ProjectPopUpTemplate"))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(new {style = "height:500px;"})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events.Error("error_handler"))
.Model(model => { model.Id(p => p.Id); })
.Create(update => …Run Code Online (Sandbox Code Playgroud) javascript asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc
我有一个上下文相关菜单,需要高亮显示文本才能使其正常工作.但是,我在使用Selenium选择文本时遇到问题.我首先找到我正在寻找的WebElement,然后尝试使用可用的不同鼠标事件与它进行交互.
当我试图选择部分文本时,除了将标记放在字符串的末尾之外,它似乎没有做任何其他事情.这就是我的文本框的样子:

这就是我需要的样子,换句话说,我需要Selenium选择的东西(为了说明的目的,只需手动完成它:

这与我在代码中尝试做的一致:
public static async Task HighlightElementByCssSelector(this RemoteWebDriver @this, string cssSelector, TimeSpan? timeout = null, TimeSpan? interval = null)
{
var element = await @this.FindElementByCssSelectorAsync(".testmarker-registryentryedit .testmarker-title-field");
Actions action = new Actions(@this).MoveToElement(element).ClickAndHold(element).MoveByOffset(10,0).Release();
action.Build().Perform();
}
Run Code Online (Sandbox Code Playgroud)
@this在这种情况下表示驱动程序,并且它FindElementByCssSelectorAsync是"包装器框架"的一部分.我尝试过不同的MoveToElement,DragAndDrop,ClickAndHold等组合,但我无法让它工作.关于这里可能有什么问题的任何指示?
刚开始使用Dropzone,到目前为止它看起来非常好.我有后端功能来处理上传本身,但是在调试时我注意到动作永远不会被击中.这是因为我的表单包含一个隐藏的输入,用于传递所需的id(用于执行上载的操作).这是我的表格:
@using (Html.BeginForm("UploadFile", "UnitSummary", FormMethod.Post, new
{
enctype = "multipart/form-data",
id = "imgUpload",
@class = "dropzone"
}))
{
<div class="fallback">
<input name="file" type="file" multiple />
<input type="submit" value="Upload" />
<input type="hidden" name="unitId" value="@Model.ViewUnitContract.Id"/>
</div>
}
Run Code Online (Sandbox Code Playgroud)
JS:
<script type="text/javascript">
$(document).ready(function () {
// Dropzone
Dropzone.options.imgUpload = {
paramName: "file", // Must match the name of the HttpPostedFileBase argument that the Upload action expects.
acceptedFiles: "image/*" // Accept images only
};
});
</script>
Run Code Online (Sandbox Code Playgroud)
这是我的行动:
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file, int unitId)
{ …Run Code Online (Sandbox Code Playgroud) 我有这个组件,它将不必要的值四舍五入到最接近的1000作为输入,像这样(参见min,max):
...
scale: {
majorUnit: 500,
minorUnit: 100,
min: nearest(minTensionRange, 1000),
max: nearest(maxTensionRange, 1000),
labels: {
template: function (e) {
return getTensionLabel(e, nearest(maxTensionRange, 1000), nearest(minTensionRange, 1000));
}
},
...
});
Run Code Online (Sandbox Code Playgroud)
最近的函数执行以下操作:
function nearest(n, v) {
n = n / v;
n = Math.round(n) * v;
console.log(n);
return n;
}
Run Code Online (Sandbox Code Playgroud)
效果很好,直到我得到一个小于0.5的值或一个负数,在这种情况下它返回0.我想要完成的是将我的组件的最大值与一个正数舍入到最接近的1000并且带负数的最小值四舍五入到最接近的1000.
即:
...
scale: {
majorUnit: 500,
minorUnit: 100,
min: 5000,
max: -5000,
labels: {
template: function (e) {
return getTensionLabel(e, nearest(maxTensionRange, 1000), nearest(minTensionRange, 1000));
}
},
...
});
Run Code Online (Sandbox Code Playgroud) 我很难找出如何对使用 Template 属性设置的网格中的列进行排序,如下所示:
@(Html.Kendo().Grid(Model.UnitDetails)
.Name("unitGrid")
.DataSource(ds => ds
.Ajax()
.Read(read => read.Action("Units_Read", "Fleet"))
.AutoSync(true)
.ServerOperation(true)
)
.Columns(columns =>
{
columns.Bound(p => p.ViewUnitContract.CurrentRun.Operation.WellContract.Location).Title("Well Site").Sortable(true);
columns.Bound(p => p.ViewUnitContract.Name).Title("Unit Name").Width(200);
columns.Template(p => { }).ClientTemplate(" ").Title("Well");
columns.Template(p => { }).ClientTemplate(" ").Title("Run").Width(75);
columns.Template(p => { }).ClientTemplate(" ").Title("Task").Width(365);
columns.Template(p => { }).ClientTemplate(" ").Title("Activity").Width(200); ;
columns.Template(p => { }).ClientTemplate(" ").Title("Depth (m)").Width(115);
columns.Template(p => { }).ClientTemplate(" ").Title("Speed (m/min)").Width(90);
columns.Template(p => { }).ClientTemplate(" ").Title("Weight (kg)").Width(90);
})
.ClientRowTemplate(Html.Partial("_ClientRowTemplate", Model).ToHtmlString())
.Sortable())
Run Code Online (Sandbox Code Playgroud)
对前两列进行排序工作得很好,但是是否可以对与 ClientTemplates 绑定的那些进行排序?
我有一个多选列表,作为标签列表的持有者.我似乎无法弄清楚如何正确获取正在更改的项目的值并与更改的事件一起传递.这是我的剑道多选:
@(Html.Kendo().MultiSelect()
.Name("tags")
.Placeholder("No tags selected for this unit")
.BindTo(new SelectList(Model.TagsAvailable))
.Events(e => e
.Select("select")
.Change("change"))
.Value(Model.TagsSelected.ToArray())
)
Run Code Online (Sandbox Code Playgroud)
这是我的js方法:
function select(e) {
var dataItem = this.dataSource.view()[e.item.index()];
var param = dataItem.Text;
var url = '/UnitDetails/TagUnit/@Model.UnitId';
$.ajax({
url: url,
data: { selectedItem: param },
type: 'GET',
dataType: 'json',
success: function (data) {
// ...
},
error: function () {
// ...
}
});
};
function change(e) {
var dataItem = this;
var param = dataItem.element.context.innerText;
var url = '/UnitDetails/UnTagUnit/@Model.UnitId';
$.ajax({ …Run Code Online (Sandbox Code Playgroud) 我正在努力遍历一个无序列表,这是由kendo-ui生成的.看看它的标记,它看起来像这样:
<ul data-role="listview" data-style="inset" data-type="group" id="unitlist">
<li>
<li>
<ul>
<li id="signalRconveyanceId-P32-HMU-01">
<a href="/UnitDetails/Index/1">P32-HMU-01
<span class="statusicon" style="background-color: #468847"></span>
</a>
</li>
<li id="signalRconveyanceId-P32-HMU-02">
<a href="/UnitDetails/Index/2">P32-HMU-02
<span class="statusicon" style="background-color: #b94a48"></span>
</a>
</li>
<li id="signalRconveyanceId-XOS-STAGING">
<a href="/UnitDetails/Index/3">XOS-STAGING
<span class="statusicon" style="background-color: #468847"></span>
</a>
</li>
<li id="signalRconveyanceId-NWI-100">
<a href="/UnitDetails/Index/4">NWI-100
<span class="statusicon" style="background-color: #"></span>
</a>
</li>
</ul>
</li>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我的javascript看起来像这样:
var listItems = $("#unitlist li");
listItems.each(function(li) {
console.log(li);
});
Run Code Online (Sandbox Code Playgroud)
我可以将列表中的行排除在外,但我得到的只是它们的索引号,在这种情况下是[0,...,6].我真正需要的是获取signalRconveyanceId-XXYY每个列表元素的id-part .我怎么能这样做?
它只是我,还是我在编辑器中遗漏了一些颜色?刚注意到,现在它让我感到恼火.

我正在使用Resharper 8运行VS2013,默认的Light主题由它提供
我正在试图找出当我的视图加载并呈现给用户时如何在我的控制器中调用方法.我已经尝试过了OnResultExecuted,OnActionExecuted但这似乎没有办法.
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
ConnectToDataSources();
base.OnResultExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
该ConnectToDataSources方法在远程服务器上建立连接wcf服务,该服务器使用SqlDependency来触发实时更新.客户端我每次有变化时都使用SignalR来更新视图.如果没有数据的"实时流",服务将返回数据库中的最后一个值.我的问题是它似乎发生得太快,以至于我的值没有正确设置.
如果我尝试使用具有一秒延迟的计时器来愚蠢,则会显示值.但是,这不是一个稳定的解决方案,所以就像我说的那样,我试图弄清楚如何在触发ConnectToDataSources方法之前等待视图完全加载.
public void ConnectToDataSources()
{
foreach (UnitDetailsModel unit in Model.UnitDetails)
{
var ods = new OperationDataSource();
var ads = new ActivityStatusDataSource();
ads.Start(unit.UnitId, ActivityReceived, AliveReceived);
ods.Start(DataReceived, unit.UnitId);
_dataSources.Add(ods);
_activityStatusDataSources.Add(ads);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用asp.net mvc中的Kendo UI网格,其中我有一个包含多个属性的模型.其中一个属性(Id)是Guid.每当我尝试在网格中创建一个新行时,输入所有细节(Id由后端服务器自动生成)并按"更新",我收到一条错误消息"需要Id字段".有办法解决这个问题吗?
我怀疑Guid-type是造成麻烦的人.网格:
@(Html.Kendo().Grid<ToolModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Displace);
columns.Bound(p => p.FishingNectOd);
columns.Bound(p => p.Length);
columns.Bound(p => p.Model);
columns.Bound(p => p.Name);
columns.Bound(p => p.Supplier).Width(150);
columns.Bound(p => p.TagId);
columns.Bound(p => p.ToolOd);
columns.Bound(p => p.Type);
columns.Bound(p => p.Weight);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(180);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("ToolPopUpTemplate"))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(new { style = "height:500px;" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(toolModel => toolModel.Weight))
.Create(update => update.Action("EditingPopup_Create", "ToolManagement"))
.Read(read => …Run Code Online (Sandbox Code Playgroud) javascript ×5
kendo-ui ×5
asp.net-mvc ×4
c# ×4
kendo-grid ×4
jquery ×3
asp.net ×1
dropzone.js ×1
formatting ×1
rounding ×1
selenium ×1
wcf ×1
webdriver ×1