动作方法在控制器中被调用两次
action method is being called twice in the controller
我的 MVC 控制器中的操作被我的 jQuery 代码调用了两次。在做了一些调查后,我发现 link 是由 jQuery 以及 MVC 视图触发的。
$('.treeview-menu li a[name="environments"]').on("click", function () {
debugger;
var genericId = $(this).attr('id');
if (genericId != undefined) {
$.ajax({
type: "GET",
url: "/Configuration/Development",
data: { 'genericId': genericId } ,
datatype: "application/json",
success: function (data) { }
})
}
else {
return;
}
});
[HttpGet]
public ActionResult Development(DashBoardViewModel model, string genericId)
{
ViewBag.EnvironmentType = "Development";
DeploymentConfiguration_DAL _deploymentDal = new DeploymentConfiguration_DAL();
model.Configuration = _deploymentDal.FetchDeploymentConfigurationByEnvironmentID(Convert.ToInt32(Convert.ToInt32(genericId)));
if (model.Configuration != null)
{
return View("Index", model);
}
return View("Index");
}
查看 link 的填充位置
<li>
<a href="#"><i class="fa fa-circle-o"></i> Deployment Environment</a>
<ul class="treeview-menu">
@foreach (var item in ViewBag.Environments)
{
<li>
<a href="@Url.Action(@item.Name,"Configuration")" id="@item.GenericMasterId" name="environments">
<i class="fa fa-circle-o"></i>
@item.Name
</a>
</li>
}
</ul>
</li>
我面临的问题是应用程序运行时以及单击动态生成的任何 link 之后。操作方法第一次运行并填充我的模型,但不是在我的视图中显示它,而是再次点击操作方法,它填充模型中的 null
因为文本框没有从数据库绑定值。
请帮我解决这个问题。有没有一种方法可以在不使用 jQuery 的情况下在我的操作结果中访问 href
的 id
值?
尝试将 @Url.Action(@item.Name,"Configuration") 替换为 href="#"。 =17=].
<a href="#" id="@item.GenericMasterId" name="environments">
这就是为什么您有 2 次调用您的控制器,1 次在 jquery 单击时,另外 1 次在您单击 link 时调用。
正如您在问题中所描述的,发生的情况是:
- jquery 运行良好(但您的问题代码对视图没有任何作用)
- href 上的 link 将页面重定向 到新视图
如果您想获取页面并且不重定向,您可以:
- 将
a
更改为 button type=button
- return 来自事件处理程序的 false
- 从事件处理程序调用 event.preventDefault()
- 删除
href=
(通过更改为按钮)
- 可能会根据其他答案更改为
#
,但建议不要这样做,如果没有上述更改之一,也会产生其他副作用。
如果你想重定向(不停留在同一页面),传入id,如你所说"without using jquery"然后改变@Url.Action
使用 routeValues 重载:
<a href='@Url.Action(item.Name, "Configuration", new { genericId = item.GenericMasterId })' ... />
您可以扩展 new { genericId =
以包含您需要的其他模型属性(尽管 id 应该足以对您的操作进行一些更改)。
我的 MVC 控制器中的操作被我的 jQuery 代码调用了两次。在做了一些调查后,我发现 link 是由 jQuery 以及 MVC 视图触发的。
$('.treeview-menu li a[name="environments"]').on("click", function () {
debugger;
var genericId = $(this).attr('id');
if (genericId != undefined) {
$.ajax({
type: "GET",
url: "/Configuration/Development",
data: { 'genericId': genericId } ,
datatype: "application/json",
success: function (data) { }
})
}
else {
return;
}
});
[HttpGet]
public ActionResult Development(DashBoardViewModel model, string genericId)
{
ViewBag.EnvironmentType = "Development";
DeploymentConfiguration_DAL _deploymentDal = new DeploymentConfiguration_DAL();
model.Configuration = _deploymentDal.FetchDeploymentConfigurationByEnvironmentID(Convert.ToInt32(Convert.ToInt32(genericId)));
if (model.Configuration != null)
{
return View("Index", model);
}
return View("Index");
}
查看 link 的填充位置
<li>
<a href="#"><i class="fa fa-circle-o"></i> Deployment Environment</a>
<ul class="treeview-menu">
@foreach (var item in ViewBag.Environments)
{
<li>
<a href="@Url.Action(@item.Name,"Configuration")" id="@item.GenericMasterId" name="environments">
<i class="fa fa-circle-o"></i>
@item.Name
</a>
</li>
}
</ul>
</li>
我面临的问题是应用程序运行时以及单击动态生成的任何 link 之后。操作方法第一次运行并填充我的模型,但不是在我的视图中显示它,而是再次点击操作方法,它填充模型中的 null
因为文本框没有从数据库绑定值。
请帮我解决这个问题。有没有一种方法可以在不使用 jQuery 的情况下在我的操作结果中访问 href
的 id
值?
尝试将 @Url.Action(@item.Name,"Configuration") 替换为 href="#"。 =17=].
<a href="#" id="@item.GenericMasterId" name="environments">
这就是为什么您有 2 次调用您的控制器,1 次在 jquery 单击时,另外 1 次在您单击 link 时调用。
正如您在问题中所描述的,发生的情况是:
- jquery 运行良好(但您的问题代码对视图没有任何作用)
- href 上的 link 将页面重定向 到新视图
如果您想获取页面并且不重定向,您可以:
- 将
a
更改为button type=button
- return 来自事件处理程序的 false
- 从事件处理程序调用 event.preventDefault()
- 删除
href=
(通过更改为按钮) - 可能会根据其他答案更改为
#
,但建议不要这样做,如果没有上述更改之一,也会产生其他副作用。
如果你想重定向(不停留在同一页面),传入id,如你所说"without using jquery"然后改变@Url.Action
使用 routeValues 重载:
<a href='@Url.Action(item.Name, "Configuration", new { genericId = item.GenericMasterId })' ... />
您可以扩展 new { genericId =
以包含您需要的其他模型属性(尽管 id 应该足以对您的操作进行一些更改)。