Javascript 从其他页面重定向后,jQuery UI对话框未打开

Javascript 从其他页面重定向后,jQuery UI对话框未打开,javascript,c#,jquery,asp.net-mvc,Javascript,C#,Jquery,Asp.net Mvc,我正在做一个MVC项目,在这个项目中,我正在显示表中的数据。 我允许用户创建,删除和编辑数据 为了显示这些CRUD操作的表单,我正在使用jQuery UI对话框弹出表单。在弹出窗口中,我使用局部视图来显示各种控件 当我直接运行相应的页面并单击编辑链接时 显示我弹出没有任何问题。例如,假设我有观点 我的查找控制器中的当前位置;我设置控制器和 RouteConfig.cs中的操作以查找和当前位置并运行它 但我的问题是,当我重定向到页面时,假设在我执行登录操作后,它在我单击编辑后不会显示弹出窗口 这是

我正在做一个MVC项目,在这个项目中,我正在显示表中的数据。 我允许用户
创建
删除
编辑
数据

为了显示这些CRUD操作的表单,我正在使用jQuery UI对话框弹出表单。在弹出窗口中,我使用
局部视图
来显示各种控件

当我直接运行相应的页面并单击编辑链接时 显示我弹出没有任何问题。例如,假设我有观点 我的查找控制器中的当前位置;我设置控制器和 RouteConfig.cs中的操作以查找和当前位置并运行它

但我的问题是,当我重定向到页面时,假设在我执行登录操作后,它在我单击编辑后不会显示弹出窗口

这是我的密码

当前位置视图:

@model PITCRoster.RosterManagementEntities

@{
    ViewBag.Title = "CurrentLocation";
}

<script src="~/Content/PopUp.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

<h2>CurrentLocation</h2>
@{
    Html.RenderPartial("_DisplayCurrentLocation", Model.tblCurrentLocations);
}

<div id="dialog">
@using (Html.BeginForm("AddLocation", "Lookups", FormMethod.Post))
{
    Html.RenderPartial("_AddLocation", new PITCRoster.tblCurrentLocation());
}
</div>
ActionMethod在弹出窗口中显示局部视图

   public ActionResult EditLocation(string id)
        {
            int locationId = Convert.ToInt32(id);
           tblCurrentLocation tblCurrentLocation = unitOfWork.tblCurrentLocation.GetByID(locationId);
           return PartialView("_EditLocation", tblCurrentLocation);
        }
我的代码的工作原理是当用户单击它触发的编辑链接时 ShowPopUp()jQuery方法,该方法接受包含url的参数 到EditLocation方法,该方法接受唯一ID作为参数

当我从不同的页面重定向到此页面时,您能帮助我为什么它不工作吗

谢谢…

可能会生成与页面相关的不正确url,它应该是
/Lookups/EditLocation/…
(前导斜杠)。建议您始终使用
Url.Action()
helper来生成Url,以确保它们是正确的。在你的情况下是这样的

@Url.Action("EditLocation", "Lookups", new { id = item.LocationId })
但是,我建议您使用行为污染标记的方法。将html更改为

<a href="#" class="edit" data-url="@Url.Action("EditLocation", "Lookups", new { id = item.LocationId })">Edit</a>
或者(生成较少的标记)

正在进行GET调用,该调用不适用于正在修改数据库中数据的方法。url被添加到浏览器历史记录中,用户当然可以在浏览器中键入地址来调用它。在最好的情况下,它会发出一个不必要的调用来删除一些不再存在的东西,在最坏的情况下,它可能会抛出一个异常,具体取决于您的代码。而是使用表单来发布值

@using (Html.BeginForm("Delete", "DeleteLocation", new { ID = item.LocationId }))
{
  @Html.AntiForgeryToken()
  <input type="submit" value="Delete" /> // style it to look like a link if thats what you want
}

不相关,但
正在生成重复的
id
属性(无效html),并且
Delete()
方法应该是POST,而不是GET-使用表单或使用ajax发布(您不希望将其添加到浏览器历史记录或让用户在地址栏中输入)@StephenMuecke My Delete()很好,这也是一个帖子。。我将删除
id=“a”
ThanksA帖子
@Html.ActionLink()
正在生成GETOhh抱歉。。你说得对。。。这是一个问题,你应该改变这一点。但是你的
'Lookups/EditLocation/'+@item.LocationId
可以吗?导致相对链接出现问题(应该有一个前导的
/
)。始终使用html帮助程序,以便正确生成url。尝试
onclick=“ShowPopUp('@Url.Action(“EditLocation”,“Lookups”,new{id=item.LocationId})”)>
-或者更好地进入21世纪并使用:)很好的解释!感谢旁注…:)如果我使用数据Url,可以吗?这样我就可以使用相同的函数编辑不同的表了…当然,我只给出了两个选项,两个都可以(第二个只是意味着生成的标记稍微少一点)如果我用[HttpPost]注释我的方法,那么为什么不需要在Html.BeginForm()中编写FormMethod.Post?默认值是
FormMethod.Post
,因此无需指定它(尽管您可以,如果您愿意的话)-只有当您想使用
FormMethod.Get时才需要它
<a href="#" class="edit" data-url="@Url.Action("EditLocation", "Lookups", new { id = item.LocationId })">Edit</a>
$('.edit).click(function() {
  $.get($(this).data('url'), function (data) {
    ....
  });
});
<a href="#" class="edit" data-id="@item.LocationId })">Edit</a>

var url = '@Url.Action("EditLocation", "Lookups")';
$('.edit).click(function() {
  $.get(url, { id: $(this).data('id') }, function (data) {
    ....
  });
});
@Html.ActionLink("Delete", "DeleteLocation", new { id = @item.LocationId }, new { onclick="return confirm('Are you sure you want to delete?')"})
@using (Html.BeginForm("Delete", "DeleteLocation", new { ID = item.LocationId }))
{
  @Html.AntiForgeryToken()
  <input type="submit" value="Delete" /> // style it to look like a link if thats what you want
}
$('form').submit(function() {
  if (!confirm("Are you sure want to delete record") { 
    return false; // cancel the submit if the user clicked the Cancel button
  }
});