在jquery.unobtrusive-ajax.js中传递给getElementById()的空字符串:16

时间:2013-07-30 13:15:16

标签: javascript jquery ajax asp.net-mvc razor

我正在开发一个ASP.NET MVC4应用程序,并已开始使用jQuery actionlinks。 但是,当我运行以下Razor代码(并单击视图票据actionlink)时,我得到一个通用的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时,该按钮不会按原样隐藏。

3 个答案:

答案 0 :(得分:5)

警告'传递给getElementById()的空字符串在发送通过Ajax.BeginForm或Ajax.ActionLink创建的表单时发生,并且打开了不显眼的验证。
在我的例子中,为Ajax.BeginForm支持的所有事件添加处理程序修复了警告问题:

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

我认为这应该可以解决你的问题  有关我blog post上的问题的详细信息。

答案 1 :(得分:0)

我相信你不能简单地做到

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

参数必须是javascript函数。如果您要调用的是无参数的,则可以执行

OnComplete = "ShowTicket"

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

OnComplete = "function() { ShowTicket(" + t.id +"); }"

答案 2 :(得分:0)

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

Html.Raw( “ID = \” SomeIdString \ “”)