昨天早些时候,以下验证通知正常运行。然后我们转换了Index
视图,其中此操作的请求源自使用局部视图,Delete
ActionLink现在位于该局部视图内,现在是JavaScript
的字符串参数方法调用是字面上呈现的,并且是“目标”删除视图中的唯一内容。
public ActionResult Delete(int id)
{
var perm = JobCardService.CheckBusinessRules(id);
if (!string.IsNullOrEmpty(perm))
{
return JavaScript("NotifyFailure('You may not delete this Installation: " + perm + "', false, 2000);");
}
JobCardViewData viewData = ViewDataFactory.CreateBaseViewData<JobCardViewData>("Installation List");
return View("Delete", viewData);
}
Filter
操作返回部分视图,请求如下:
<div class="editor-field">
<% using (Ajax.BeginForm("Filter", "JobCard", new AjaxOptions { UpdateTargetId = "jobList" }))
{ %>
<%= Html.DropDownListFor(model => model.RequesterId, new SelectList(Model.RequesterList, "RequesterID", "CompanyName", Model.RequesterId), new { onchange = "$('#Select_Save').click();" })%>
<input id="Select_Save" type="submit" value="Save" style="display: none" />
<%
}%>
</div>
答案 0 :(得分:1)
请参阅此问题的评论ASP.NET MVC Javascript ActionResult
另一方面是使用此返回类型被认为是反模式,应该避免。建议的方法是使用Json结果。
修改强>
由于从Controller返回了javascript,另一种方法是将脚本发送回浏览器,将用户重定向到正确的页面。
public ActionResult Delete(int id)
{
var perm = JobCardService.CheckBusinessRules(id);
if (!string.IsNullOrEmpty(perm))
{
return JavaScript("NotifyFailure('You may not delete this Installation: " + perm + "', false, 2000);");
}
// you may need to do a bit more to create a URL in the form of http://...
UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("ActionName","ControllerName", new{id=1}); // the new Action will return the delete view
return Javascript(String.Format("window.location =""{0}"",url);
}
有关UrlHelper的更多信息,请参阅Creating a URL in the controller .NET MVC。
答案 1 :(得分:1)
如果action方法负责返回一个视图,那么响应似乎不应该返回一个JavaScript,如果是错误的,因为没有提供底层的ASP.NET页面,这意味着你会将它看作文字文本。
考虑将方法调用分配给ViewData,并在客户端执行以下操作:
<% if (ViewData["X"] != null) { %>
<script type="text/javascript">
<%= ViewData["X"] %>
</script>
<% } %>
像我一样调用VIewData [“X”]应直接呈现JavaScript代码并在解析时直接执行。
我认为这可行;你总是可以利用eval之类的其他机制来解析内容,或做任何你可能需要的其他机制....
答案 2 :(得分:0)
这可能不是最好的方法,但我遇到的其他答案都需要进行大量的返工才能实现。这需要一个简单的小改动,并且完全按照要求工作。我所要做的只是更改Delete
操作链接:
<%= Html.ActionLink("Delete", "Delete", new { id = item.InstallationDBNumber }) %>
到此:
<%= Ajax.ActionLink("Delete", "Delete", new { id = item.InstallationDBNumber }, new AjaxOptions { HttpMethod = "Get" }) %>