我正在开发一个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时,该按钮不会按原样隐藏。
答案 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 \ “”)