model.Selected, new { onclick = "SaveSelectio-6ren">
gpt4 book ai didi

javascript - 无法获取 EditorTemplate 中的元素

转载 作者:行者123 更新时间:2023-12-02 19:21:49 25 4
gpt4 key购买 nike

以下 EditorTemplate 无法按我希望的方式工作;

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.Models.BusinessUnitSelected>" %>

<tr>
<td><%: Model.BusinessUnit.BusinessUnitName %></td>
<td><%: Html.CheckBoxFor(model => model.Selected,
new { onclick = "SaveSelection(" + Model.EmployeeId + ", " + Model.BusinessUnit.BusinessUnitId + ", " + Convert.ToInt32(Model.Selected) + ", " + this.ClientID + ")" }) %>
</td>
</tr>

我想获取复选框的 Id,但 this.ClientID 无法做到这一点。此 EditorTemplate 在表中形成行网格。当用户单击复选框时,将执行 SaveSelection javascript;

    function SaveSelection(employeeId, businessUnitId, selectedFlag, elementId) {
//var tempFlag = selectedFlag === "0";

var element = document.getElementById(elementId);
if (selectedFlag === null) {
selectedFlag = true;
} else {
selectedFlag = !selectedFlag;
}

var url = '<%: Url.Action("AddBusinessUnitForEmployee", "DataService")%>';
dataService.saveSelection(employeeId, businessUnitId, selectedFlag, elementId, SavedSetting, url);
}

SavedSetting = function(data) {
$('#' + data.ElementId).after('<span class="error">' + data.Message + '</span>');
};

我想要的是在服务器调用后在复选框旁边显示一条消息。那么我该怎么做呢?对于如何改进此代码的建议,我将获得奖励。

最佳答案

您可以使用 HTML5 data-* 属性:

<%@ Control 
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<SHP.Models.BusinessUnitSelected>"
%>

<tr>
<td><%: Model.BusinessUnit.BusinessUnitName %></td>
<td>
<%= Html.CheckBoxFor(
x => x.Selected,
new {
data_url = Url.Action("AddBusinessUnitForEmployee", "DataService"),
data_employeeId = Model.EmployeeId,
data_businessUnitId = Model.BusinessUnit.BusinessUnitId
}
) %>
</td>
</tr>

然后在一个单独的 javascript 文件中不显眼地订阅这些复选框的 .click() 事件,然后从 data-* 属性中获取所需的信息:

$(function() {
$('tr input[type="checkbox"]').click(function() {
var elementId = $(this).attr('id');
var url = $(this).data('url');
var employeeId = $(this).data('employeeId');
var businessUnitId = $(this).data('businessUnitId');
var selectedFlag = !$(this).is(':checked');

dataService.saveSelection(
employeeId,
businessUnitId,
selectedFlag,
elementId,
SavedSetting,
url
);
});
});

备注:我不太记得 ASP.NET MVC 2 是否支持 data_ 语法,以便在生成的标记中将其重写为 data- 语法。 ASP.NET MVC 3 及更高版本明确支持这一点。如果它不适合您,您可以使用不同的重载,采用 RouteValueDictionary:

<%= Html.CheckBoxFor(
x => x.Selected,
new RouteValueDictionary
{
{ "data-url", Url.Action("AddBusinessUnitForEmployee", "DataService") },
{ "data-employeeId", Model.EmployeeId },
{ "data-businessUnitId", Model.BusinessUnit.BusinessUnitId }
}
) %>

关于javascript - 无法获取 EditorTemplate 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com