在mvc

时间:2015-07-08 06:53:56

标签: javascript c# jquery asp.net-mvc asp.net-mvc-4

我想在刷新后点击一行。我在视图中有这个:

@foreach (var item in Model) {
    <tr class="@(item.Id == (int)(Session["Id"] ?? 0) ? ".tr.sfs-selected  .table.sfs-selectable tbody .dataTable sfs-selected .dataTable sfs-selectable .table-responsive" : String.Empty)" onclick="'<tr>'" data-url="@Url.Action("Index", new RouteValueDictionary { { "id", item.Id } })">
        <td>
            @Html.DisplayFor(modelItem => item.Id)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.IsEnabled)
        </td>
        <td>
    </tr>
}

我有这个jQuery:

$("table.sfs-selectable tbody").on("click", "tr", function (ev) {
    var $row = $("tr.sfs-selected").each(function(){
        selectRow($row, !$row.hasClass("sfs-selected"));
    });
});

但刷新后不会点击该行。

谢谢

观点:

   <table class="table table-striped table-bordered table-hover dataTable sfs-selectable sfs-col1-right-aligned">

                    <thead>
                        <tr>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.Id).ToString(), "Sort-Product", new { sortColumn = "id", sortOrder = (ViewBag.sortColumn == "id" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("id", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.Name).ToString(), "Sort-Product", new { sortColumn = "name", sortOrder = (ViewBag.sortColumn == "name" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("name", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.IsEnabled).ToString(), "Sort-Product", new { sortColumn = "enabled", sortOrder = (ViewBag.sortColumn == "enabled" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("enabled", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.FormName).ToString(), "Sort-Product", new { sortColumn = "formname", sortOrder = (ViewBag.sortColumn == "formname" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("formname", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.TemplateName).ToString(), "Sort-Product", new { sortColumn = "design", sortOrder = (ViewBag.sortColumn == "design" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("design", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.RouteLink(Resources.Entity.Product.PublicUrl, "Sort-Product", new { sortColumn = "urlname", sortOrder = (ViewBag.sortColumn == "urlname" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString, filter = ViewBag.Filter })
                                @ViewHelper.GetSortIndicator("urlname", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th>
                                @Html.DisplayNameFor(model => firstItem.SubmittedForms)
                            </th>
                            <th>
                                @Html.RouteLink(Html.DisplayNameFor(model => firstItem.ModificationDate).ToString(), "Sort-Product", new { sortColumn = "modified", sortOrder = (ViewBag.sortColumn == "modified" && ViewBag.sortOrder != "desc") ? "desc" : "", searchString = ViewBag.SearchString })
                                @ViewHelper.GetSortIndicator("modified", ViewBag.sortColumn, ViewBag.sortOrder)
                            </th>
                            <th class="hidden"></th>
                        </tr>
                    </thead>
                    <tbody>
                                                @foreach (var item in Model) {

                                                    <tr class="@(item.Id == (int)(Session["Id"] ?? 0) ? ".tr.sfs-selected  .table.sfs-selectable tbody .dataTable sfs-selected .dataTable sfs-selectable .table-responsive" : String.Empty)"   data-url="@Url.Action("Index", new RouteValueDictionary { { "id", item.Id } })">
                                                        <td>
                                                            @Html.DisplayFor(modelItem => item.Id)
                                                        </td>
                                                        <td>
                                                            @Html.DisplayFor(modelItem => item.Name)
                                                        </td>
                                                        <td>
                                                            @Html.DisplayFor(modelItem => item.IsEnabled)
                                                        </td>
                                                        <td>
                                                            @{
                            bool viewLink = item.IsEnabled;
                            if (!String.IsNullOrEmpty(item.FormName)) {
                                var form = item.FormLibraryEntry;
                                if (form == null) {
                                    viewLink = false;
                                    @Html.DisplayFor(modelItem => item.FormName)
                                                                <em>(@Resources.Entity.Environment.Removed)</em>
                                }
                                else {
                                    @Html.DisplayFor(modelItem => form.Name)
                                                                <a href="@Url.Action("Details", "FormLibrary", new { id = item.FormName })"><i class="fa fa-fw fa-external-link-square text-info"></i></a>
                                }
                            }
                                                            }
                                                        </td>
                                                        <td>
                                                            @{
                            if (!String.IsNullOrEmpty(item.TemplateName)) {
                                var template = item.TemplateLibraryEntry;
                                if (template == null) {
                                    viewLink = false;
                                    @Html.DisplayFor(modelItem => item.TemplateName)
                                                                <em>(@Resources.Entity.Environment.Removed)</em>
                                }
                                else {
                                    @Html.DisplayFor(modelItem => template.Name)
                                                                <a href="@Url.Action("Details", "DesignTemplate", new { id = item.TemplateName })"><i class="fa fa-fw fa-external-link-square text-info"></i></a>
                                }
                            }
                                                            }
                                                        </td>
                                                        <td>
                                                            @if (!String.IsNullOrEmpty(item.UrlName)) {
                                        var defaultProductUri = CustomerConfig.ToHostUri(Request.Url.Scheme, defaultHostHeader, Request.Url.Port, (isProduction ? "" : "TEST/") + item.UrlName);
                                        if (viewLink) {
                                            @item.UrlName
                                                                <a href="@defaultProductUri.ToString()" title="@Resources.Entity.Product.ViewProduct" target="_blank"><i class="fa fa-fw fa-external-link-square text-info"></i></a>
                                        }
                                        else {
                                            @item.UrlName
                                        }
                                    }
                                                        </td>
                                                        <td>
                                                            @{

                            int cnt = item.SubmittedForms.Where(prod => prod.Order.IsProduction == isProduction).Count();
                            @(cnt.ToString() + " ")
                            if (cnt > 0) {
                                <a href="@Url.Action("Index", "SubmittedForms", new { filter = item.Id })">
                                    <i class="fa fa-fw fa-external-link-square text-info"></i>
                                </a>

                            }
                                                            }
                                                        </td>
                                                        <td class="text-nowrap">
                                                            @item.ModificationDate.ToString("G")
                                                        </td>
                                                        <td class="hidden">
                                                            <span>


                                                                @if (!String.IsNullOrEmpty(item.UrlName) && !String.IsNullOrEmpty(item.FormName)) {
                                                                    @Html.RouteLink(Resources.Action.Navigation.Preview, "ProductPreview", new { productUrl = item.UrlName, customerSchema = custSchema }, new { target = "_blank" })
                                        }
                                        else { @(Resources.Action.Navigation.Preview)  }
                                                                | @Html.ActionLink(Resources.Action.Navigation.Details, "Details", new { id = item.Id })
                                                                | @Html.ActionLink(Resources.Action.Navigation.Edit, "Edit", new { id = item.Id })
                                                            </span>
                                                        </td>



                                                    </tr>



                        }





                    </tbody>
                </table>

所以我有它。但现在的问题是我必须双击一行

这是selectRow函数:

function selectRow($row, doSel) {
            var $section = $row.closest("section");
            if (doSel) {
                $section.find("tr.sfs-selected").removeClass("sfs-selected");
                $row.addClass("sfs-selected");
                $section.find(".sfs-actionbutton").each(function (index) {
                    var $btn = $(this);
                    $btn.addClass("disabled");
                    var href = $row.find("td:last a").filter(function () {
                        return $(this).text().trim() == $btn.text().trim();
                    }).attr("href");

                    if (href) {
                        $btn.attr("href", href).removeClass("disabled");
                        if ($btn.parent().is(".btn-group")) {
                            $btn.parent().children("a").removeClass("disabled");
                            $btn.attr("data-href", href + "/");
                            $btn.attr("href", href + "/" + $(".sfs-select-preview-template .active a").attr("href"));
                        }
                    }
                });
            }
            else {
                $row.removeClass("sfs-selected");
                $section.find(".sfs-actionbutton").addClass("disabled");
            }
        }

2 个答案:

答案 0 :(得分:1)

你只有错误的选择器,我应该是这样的:

var $row = $("tr.sfs-selected").each(function(){
        selectRow( $(this), $(this).hasClass("sfs-selected"));
    });

关键在于each()方法,您可以使用this关键字获取一个收集元素。

答案 1 :(得分:0)

您似乎通过向它们添加前导点.来指定类名,但我不认为您的意思是这样(或者jQuery选择器不起作用)。内联onclick也不处于工作状态,但是你的jQuery事件应该处理它,以便可以删除。

<tr class="@(item.Id == (int)(Session["Id"] ?? 0) ? "sfs-selected sfs-selectable" : String.Empty)" data-url="@Url.Action("Index", new RouteValueDictionary { { "id", item.Id } })">

现在,我假设你并不是真的想在每一行都有一个名为tbody dataTable table-responsive的类,所以我删除了它们。它们应该设置在<table>和/或<tbody>上,但如果您需要它们,请重新添加它们。

对你来说jQuery:

selectRow()的调用似乎有点奇怪,因为它只会迭代具有类sfs-selected的表行,因此它总是使用selectRow($(element), false)调用该函数。

换句话说:当您点击表格行时,任何具有类sfs-selected的行都会删除它的类,并且 actionbutton 将被禁用。这是理想的行为吗?