【问题标题】:ASP.NET Core MVC - Passing Model Data Back to Controller from ViewASP.NET Core MVC - 将模型数据从视图传递回控制器
【发布时间】:2021-02-24 19:31:32
【问题描述】:

应该是一个相对简单的问题,但目前我无法将视图中更新的模型值传递回控制器。

正如您在下面看到的,我们在视图中有一个非常简单的下拉列表。模型中的“租户”字符串应该设置为下拉列表中选择的任何值。

但是,当点击提交按钮时,“租户”字符串在控制器中返回 null...

我错过了什么?

谢谢!

型号:

public class TenantModel
    {
        public List<string> tenantList { get; set; }

        public string tenant { get; set; }
    }

查看:

@model TenantModel

@{
    ViewData["Title"] = "Manage";
}

<h1>Manage Databases</h1>



@Html.DropDownListFor(m => m.tenant, new SelectList(Model.tenantList), "Select Tenant", new { @class = "dropdown", @style = "width: 220px" })

<br />


<button type="submit" onclick="location.href='@Url.Action("DropDbs", "Environments", Model)'" class="btn btn-danger">Destroy</button>

控制器

    public class EnvironmentsController : Controller
    {

        public IActionResult Manage()
        {
            var tenantModel = new TenantModel();
            
            tenantModel.tenantList = Utils.TenantList();
            
            return View(tenantModel);
        }
        
        
        public IActionResult DropDbs(TenantModel tenantModel)
        {
            
            return RedirectToAction("Manage");
        }
    }

【问题讨论】:

  • 您的表单标签或 Html.BeginForm 在哪里?

标签: c# .net asp.net-core .net-core


【解决方案1】:

我想在表单上有多个按钮,每个按钮都针对我的控制器内的不同操作。

在Asp.net core MVC中,可以使用标签助手asp-来实现。

<form method="post">
    @Html.DropDownListFor(m => m.tenant, new SelectList(Model.tenantList), "Select Tenant", new { @class = "dropdown", @style = "width: 220px" })

    <br />

    <button type="submit" asp-action="Action1" asp-controller="Controller" class="btn btn-danger">Operate1</button>
    <button type="submit" asp-action="Action2" asp-controller="Controller" class="btn btn-danger">Operate2</button>
    <button type="submit" asp-action="Action3" asp-controller="Controller" class="btn btn-danger">Operate3</button>

</form>

【讨论】:

  • 谢谢,我确实尝试过,但最初无法让它工作,我想我错过了按钮周围的表单标签,添加这些似乎已经成功了。跨度>
【解决方案2】:

你们都做错了。您正在重定向到操作并传递一个模型,但问题是您的下拉列表不会填充它为什么它为空。

您需要将下拉列表包装在表单标签中并将表单发布到操作中。

【讨论】:

  • 谢谢 - 如果我将它包装在 @using (Html.BeginForm("DropDbs", "Environments", FormMethod.Post) 它确实可以工作并通过“租户”字符串但我只能定位这样一个动作,我想在表单上有多个按钮,每个按钮都针对我的控制器内的不同动作。
  • 使用隐藏字段作为标签来识别操作并在按钮单击时更改字段,然后提交表单。
猜你喜欢
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2011-02-11
  • 1970-01-01
相关资源
最近更新 更多