【问题标题】:Javascript from view routing to the wrong action in the controllerJavascript 从视图路由到控制器中的错误操作
【发布时间】:2019-01-03 13:51:14
【问题描述】:

项目环境:C#、MVC 5.0

来自Edit.cshtml的HTML代码:

@Html.EditorFor(model => model.ActiveClient.ClientName, new { 
    htmlAttributes = new { @onchange = "OnNameEdit(this.value)", 
    @class = "form-control" } })

来自 Edit.cshtml 的 jQuery / JavaScript:

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}
<script>
function OnNameEdit(val) {
    window.location.href = "OnNameEdit?Value=" + val;
};
</script>

控制器中的操作代码:

[HttpGet]
public ActionResult OnNameEdit(String Value)
{
    WFViewModel = (WorkflowVM)TempData["WFViewModel"];
    if (Value != null)
    {
        WFViewModel.ActiveClient.ClientName = Value;
    }
    TempData["WFViewModel"] = WFViewModel;
    return RedirectToAction("Edit", "Clients");
}

控制在同一个控制器中执行的操作:

// GET: Clients/Edit/5
public ActionResult Edit(int? id)
{
    WFViewModel = (WorkflowVM)TempData.Peek("WFViewModel");
 // Remaining code removed for brevity

视图加载正常。进入字段以修改 ClientName 的内容并修改内容。 当一个选项卡退出 ClientName 控件时,控制流向脚本部分中的 OnNameEdit() 函数 Edit.cshtml 文件。当该函数完成时,控制转移到名为 Edit() 的操作,而不是 在同一个控制器中名为 OnNameEdit() 的操作。

此代码与同一控制器的 Create 视图的代码基本相同,并且可以完美运行

任何建议将不胜感激。

【问题讨论】:

  • 这是因为您使用了 RedirectToAction("Edit")。尝试返回 View();
  • 感谢@apomene 的建议,但关键是从一开始就没有达到 Action OnNameEdit。

标签: javascript jquery asp.net-mvc model-view-controller


【解决方案1】:

您可以使用 AJAX 调用,例如:

function  OnNameEdit(val)
{
   $.ajax({
      url: 'OnNameEdit',
      data: { Value: val }
   }).done(function() {
      alert('OnNameEdit called'); 
  });
}

【讨论】:

  • 您好@apomene,我尝试了您的 JavaScript Ajax 调用,它直接进入控制器上的 Edit 操作,而不是预期的 OnNameEdit 操作。 URL 行不应该同时包含操作和控制器吗?
  • 您好@apomene,经过一番戳戳和扭曲后,需要对您的建议进行以下更改: URL:'@Url.Action("OnNameEdit", "Clients")',谢谢寻求帮助
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多