【问题标题】:Multiple actions on the same view/controller in ASP.NET MVCASP.NET MVC 中同一视图/控制器上的多个操作
【发布时间】:2020-03-24 11:18:03
【问题描述】:

首先我想问一下我的英语不好。我对 ASP.NET MVC 非常陌生,目前正在编写我的第一个 Web 应用程序。

我有一个这样的控制器:

namespace MaterialProject.Controllers
{
    public class AdminController : Controller
    {
        [HttpGet]
        public IActionResult Admin()
        {
            //file some Viewbags from database
        }

        [HttpPost("UpdatePassword")]
        [ValidateAntiForgeryToken]
        public IActionResult UpdatePassword(EditUser euModel)
        {
            //database update
        }

        [HttpPost("UpdateGroupID")]
        [ValidateAntiForgeryToken]
        public IActionResult UpdateGroupID(EditUser euModel)
        {
            //database update
        }
    }
}

当用户选择 UpdatePassword 我想要执行该操作并且用户选择 UpdateGroupID 执行其他操作时,我希望我的视图有 2 个提交按钮。

我的视图叫做 Admin.chtml

<div class="container">
    <form asp-controller="Admin" asp-action="UpdatePassword" method="post" class="form-horizontal" role="form">
        <div class="alert-danger" asp-validation-summary="ModelOnly"></div>
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
            <label asp-for="Username" class="control-label" value=""></label>
            <select asp-for="ID" class="form-control"
                    asp-items="@(new SelectList(ViewBag.editUser, "ID", "Username"))"></select>
        </div>
        <div id="submit">
            <input type="submit" name="submit" value="Update Password" />
        </div>
    </form>

    <form asp-controller="Admin" asp-action="UpdateGroupID" method="post" class="form-horizontal" role="form">
        <div class="alert-danger" asp-validation-summary="ModelOnly"></div>
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
            <label asp-for="Username" class="control-label" value=""></label>
            <select asp-for="ID" class="form-control"
                    asp-items="@(new SelectList(ViewBag.editUser, "ID", "Username"))"></select>
        </div>
        <div id="submit">
            <input type="submit" name="submit" value="Update GroupID" />
        </div>
    </form>
</div>

如果我执行上面的代码,我会得到这个错误:

处理请求时发生未处理的异常。

InvalidOperationException:未找到视图“UpdatePassword”。搜索了以下位置:

/Views/Admin/UpdatePassword.cshtml /Views/Shared/UpdatePassword.cshtml /Pages/Shared/UpdatePassword.cshtml

Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable originalLocations)

因为我从未创建过该视图。

有什么方法可以通过在我的表单上按任何提交按钮从我的控制器调用不同的代码块?

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc asp.net-core


    【解决方案1】:

    如果没有看到这些操作的全部内容,很难说,但我猜根据该错误消息,您在两个发布操作的底部附近都有return View();。很可能您在两个帖子中的代码实际上都在运行,它只是不知道最后要做什么。

    您有多种选择。

    1. 为具有相同名称的操作创建视图
    2. return View(); 修改为return View("Admin"); 之类的内容,以便返回管理视图
    3. 将其更改为重定向...例如。 return RedirectToAction("controller","view");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多