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