0

我来自 webforms 背景,此时我对 MVC4 感到非常沮丧。我一直在看例子,看视频,谷歌搜索等等。似乎没有任何效果,我即将认输,但是,这个网站非常有帮助,所以我会看看我是否能得到一些帮助。

我想做的是:

  1. 使用 jQuery 选项卡(easytabs)创建一个页面(顺便说一句)
  2. 在选项卡单击事件上,我希望它通过 ajax 重新加载选项卡

在网络表单中,我会在早上 8 点完成这项工作。我现在被困在这个和下午 5 点。沮丧到难以置信。

我遵循了 MVC4 网站上的网络视频教程,这个可爱的例子是在 Razor 中,我不想使用它,但是,我仍然遵循它来获取知识:

http://www.asp.net/mvc/overview/javascript
-> 'Javascript 和 Ajax'
-> http://pluralsight.com/training/players/PSODPlayer?author=scott-allen&name=mvc3-building-ajax&mode= live&clip=0&course=aspdotnet-mvc3-intro

在我的 easytabs 中,在 HTML 中,我将我的 html 定义为:

<li class="tab"><a href="#tabs-users" class="light heavy">Manage Sections</a></li>

因此,在观看视频之后,我尝试通过 ajax 助手创建和锚定带有 ajax 属性的标签来替换这个 HTML:

 <% Ajax.ActionLink("Manage Sections", "tabsUsers", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tabs-users", InsertionMode = InsertionMode.Replace }); %>

这什么都没有。它不会在页面上呈现它。所以,我去打猎,发现我需要以下东西:

<%: Scripts.Render("~/bundles/jqueryval") %>

该捆绑包包括“ jquery.unobtrusive-ajax.min.js ”,并且在 web.config 中我有以下设置:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

依然没有。

原始 HTML

<div id="tab-container" class="tab-container">
    <ul class="etabs">
        <li class="tab upper first"><a href="#tabs-users" class="light heavy">Manage Users</a></li>
        <li class="tab upper"><a href="#tabs-groups" class="light heavy">Manage Sections</a></li>
    </ul>
    <div id="tabs-users" class="normal light clearfix">
        Users
    </div>
    <div id="tabs-groups" class="normal light clearfix">
        Groups
    </div>
</div>

我有一种感觉 Ajax.ActionLink 不喜欢在那里呈现锚标记,但我不知道为什么。

控制器

    [HttpGet]
    public PartialViewResult tabsUsers()
    {
        IEnumerable<SelectListItem> items = UserManager.GetUsers()
            .Select(c => new SelectListItem
            {
                Value = c.UserID.ToString(),
                Text = c.FirstName + c.LastName
            });

        return PartialView("UsersPartial", items);
    }

用户部分视图

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<LMS.Data.User>>" %>

<table>
    <tr>
        <th>
            <%: Html.DisplayNameFor(model => model.UserName) %>
        </th>
        <th>
            <%: Html.DisplayNameFor(model => model.FirstName) %>
        </th>
        <th>
            <%: Html.DisplayNameFor(model => model.LastName) %>
        </th>
        <th>
            <%: Html.DisplayNameFor(model => model.Password) %>
        </th>
        <th>
            <%: Html.DisplayNameFor(model => model.Email) %>
        </th>
        <th></th>
    </tr>

<% foreach (var item in Model) { %>
    <tr>
        <td>
            <%: Html.DisplayFor(modelItem => item.UserName) %>
        </td>
        <td>
            <%: Html.DisplayFor(modelItem => item.FirstName) %>
        </td>
        <td>
            <%: Html.DisplayFor(modelItem => item.LastName) %>
        </td>
        <td>
            <%: Html.DisplayFor(modelItem => item.Password) %>
        </td>
        <td>
            <%: Html.DisplayFor(modelItem => item.Email) %>
        </td>
        <td>
            <%: Html.ActionLink("Edit", "Edit", new { id=item.UserID }) %> |
            <%: Html.ActionLink("Details", "Details", new { id=item.UserID }) %> |
            <%: Html.ActionLink("Delete", "Delete", new { id=item.UserID }) %>
        </td>
    </tr>
<% } %>

</table>

运行时呈现的脚本部分

        <script src="/Scripts/jquery-1.6.2.js" type="text/javascript"></script>

        <script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>

        <script src="/Scripts/jquery-ui-1.8.11.js" type="text/javascript"></script>

        <script src="/Scripts/jquery.easytabs.min.js" type="text/javascript"></script>
<script src="/Scripts/script.js" type="text/javascript"></script>

有任何想法吗??我真的很想在这里给 MVC 一个有价值的机会,但这对我来说不是很好。

4

1 回答 1

2

这什么都没有。它不会在页面上呈现它。

这是因为正确的语法如下:

<%= Ajax.ActionLink("Manage Sections", "tabsUsers", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tabs-users", InsertionMode = InsertionMode.Replace }) %>

作为一个长时间的 WebForms 用户在早上 8 点完成工作,您应该知道它<%=用于将结果输出到响应,而<%最后;只是在服务器上执行命令而不输出任何内容。

于 2012-09-11T21:06:19.840 回答