0

我正在开发一个 ASP.NET MVC4 应用程序并开始使用 jQuery actionlinks。但是,当我运行以下 Razor 代码(并单击查看工单操作链接)时,我收到一个通用 jQuery 错误(两次),表示将一个空字符串传递给 getElementById()。我不知道这个错误发生在哪里,因为 firefox 只是链接到 jQuery 代码。这是我的 Razor 代码:(我知道 js 函数 show 和 hideticket 是空的,但这是为了简化代码):

<script>
function ShowTicket(id) {
    $("#viewTicketButton" + id).hide();
    $("#hideTicketButton" + id).show();
    $("#viewTicket").show();
}

function HideTicket(id) {
    $("#viewTicketButton" + id).show();
    $("#hideTicketButton" + id).hide();
    $("#viewTicket").hide();
}
</script>

<h3>Your tickets</h3>
<table border="1">
    <tr>
        <td>Title:</td>
        <td>Urgency:</td>
        <td>Status:</td>
    </tr>
    @foreach (SupportTicketViewData t in Model.supportTicketViewDataList)
    {
        <tr>
            <td>@t.title</td>
            <td>@t.text</td>
            <td>@t.status</td>
            <td>@Ajax.ActionLink("View Ticket", "ViewTicket", new { id = t.id },
            new AjaxOptions
            {
                HttpMethod = "GET",
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "viewTicket",
                OnComplete = "ShowTicket(" + t.id +");"
            }, new { id = "viewTicket" + t.id })</td>
            <td><button  id="@Html.Raw("HideTicket" + t.id)" onclick="HideTicket(@t.id);">Hide Ticket</button></td>
        </tr>
    }
</table>

<div id="viewTicket">
</div>

我也从 GET 请求中得到了一个结果,因为它被插入到了 div 元素中,但是在 Firefox 中调试时出现了 2 个错误。

此外,当我单击 viewTicketButton 时,该按钮不会像应有的那样隐藏。

4

3 回答 3

5

当发送通过 Ajax.BeginForm 或 Ajax.ActionLink 创建的表单并打开不显眼的验证时,会出现警告“传递给 getElementById() 的空字符串”。
在我的情况下,将处理程序添加到 Ajax.BeginForm 支持的所有事件中修复了带有警告的问题:

@using (Ajax.BeginForm(“SomeAction”, null, new AjaxOptions() {
  OnBegin = “someFunction”,  
  OnComplete = “ShowTicket”,  
  OnFailure = “someFunction”,  
  OnSuccess = “someFunction”  
} 
....

我相信这应该可以解决您的问题。
有关我的博客文章的问题的更多详细信息。

于 2013-11-09T20:48:10.277 回答
0

我相信你不能简单地做

OnComplete = "ShowTicket(" + t.id +");"

参数必须是 javascript 函数。如果你要调用的是无参数的,你可以这样做

OnComplete = "ShowTicket"

其中 show ticket 是函数对象,所以这很好。但是,在您的情况下,您必须将 ID 传递给 ShowTicket。尝试以下操作:

OnComplete = "function() { ShowTicket(" + t.id +"); }"
于 2013-07-30T13:21:37.720 回答
0

您可能必须添加斜杠以补偿 id 标记中所需的双引号,例如:

Html.Raw("id=\"SomeIdString\"")

于 2013-07-30T13:33:24.303 回答