Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在EditorTemplate中获取元素_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Javascript 无法在EditorTemplate中获取元素

Javascript 无法在EditorTemplate中获取元素,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,以下EditorTemplate无法按我的意愿工作 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.Models.BusinessUnitSelected>" %> <tr> <td><%: Model.BusinessUnit.BusinessUnitName %></td> <td><%: H

以下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>

模型。选定,
新的{onclick=“SaveSelection(“+Model.EmployeeId+”,“+Model.BusinessUnit.BusinessUnitId+”,“+Convert.ToInt32(Model.Selected)+”,“+this.ClientID+”)%>
我想获取复选框的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>');
    };
函数保存选择(employeeId、businessUnitId、selectedFlag、elementId){
//var tempFlag=selectedFlag==“0”;
var element=document.getElementById(elementId);
如果(selectedFlag==null){
selectedFlag=true;
}否则{
selectedFlag=!selectedFlag;
}
var url='';
saveSelection(employeeId、businessUnitId、selectedFlag、elementId、SavedSetting、url);
}
SavedSetting=函数(数据){
$('#'+data.ElementId.),在(''+data.Message+'')之后;
};
我想要的是在服务器调用后在复选框旁边显示一条消息。 那我该怎么做呢?
对于如何改进此代码的建议,将授予Upticks奖励。

您可以使用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>
$(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是否支持
数据
语法,以便在生成的标记中将其重写为
数据-
语法。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 }
    }
) %>
x.选中,
新RouteValueDictionary
{
{“数据url”,url.Action(“AddBusinessUnitForEmployee”,“DataService”)},
{“data employeeId”,Model.employeeId},
{“数据业务单元ID”,Model.BusinessUnit.businessUnitId}
}
) %>

你能使用模板系统吗?像这样组合javascript事件处理程序很麻烦。你能提供一个更好的方法链接吗?尝试搜索模板引擎。darin这是一个很好的解决方案,aarme这是一个很好的解决问题的方法,比如RouteValueDirectory就是你给出的原因。但是,使用了此选项后,url、employeeId和businessUnitId的值为空。这是获取值的正确语法吗?var url=$(this.val('data-url');