【问题标题】:How to pass model value from a view to a controller when clicking on the button in ASP.NET MVC单击 ASP.NET MVC 中的按钮时如何将模型值从视图传递到控制器
【发布时间】:2020-03-12 03:49:16
【问题描述】:

我试图将模型值Model.CodigoPedido 从下面的视图传递给控制器​​,同时单击按钮时,我想将用户重定向到我试图传递的同一个控制器该值:

@model Status_Pedido.ViewModels.CodigoPedidoViewModel

@{
    ViewBag.Title = "Consultar";
}

@using (Html.BeginForm("Inserir_Pedido", "Home", FormMethod.Post)) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.CodigoPedido, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CodigoPedido, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.CodigoPedido, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Procurar" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

最好的方法是什么?我试过使用

<input type="submit" value="Procurar" class="btn btn-default"  
       onclick="location.href='@Url.Action("Action", "Controller", new {Pedido = Model.CodigoPedido})'" /> 

但我总是收到“空对象引用”异常。

目标控制器:

public ActionResult Mostrar_Status(string CodigoPedido)
{
    object ResultadoApiJson = RequisicaoApi.GetApiResultadoPedido(CodigoPedido);
    var resultado = JsonApi.FromJson(ResultadoApiJson.ToString());

    List<ListaPedidosViewModel> listaPedidos = new List<ListaPedidosViewModel>();

    if (resultado.Value == null && resultado.OdataMetadata == null)
    {
        ViewBag.ResultNullException = "Houve um erro de conexão com o servidor, por favor tente novamente mais tarde.";
    }
    else if (resultado.OdataCount == 0 && resultado.OdataMetadata != null && resultado.Value != null)
    {
        ViewBag.NoOrderException = "Não foram encontrados pedidos.";
    }
    else
    {
        foreach (var pv in resultado.Value)
        {
            listaPedidos.Add(new ListaPedidosViewModel()
                    {
                        Pedido = pv.Pedido,
                        Status = pv.Status,
                        DataPedido = pv.DataPedido,
                        ValorPedido = pv.ValorPedido,
                        NomeCliente = pv.NomeCliente
                    });
        }                
    }

    return View("Index", listaPedidos);
}

【问题讨论】:

  • 请发布您的控制器用于此视图的配置方式。
  • 我刚刚编辑了帖子,谢谢!

标签: c# html asp.net .net asp.net-mvc


【解决方案1】:

在表单中添加@Html.HiddenFor(model =&gt; model.CodigoPedido)。您应该能够在控制器中访问它。让您的Inserir_Pedido 操作执行任何操作并以RedirectToAction(["action name", arguments); 结束。

【讨论】:

  • 此 RedirectToAction 可能会有所帮助,我试图通过重载传递视图模型值:字符串操作名称、字符串控制器、字符串 objectroute,但我无法传递第三个参数:```redirectToAction( “Mostrar_Status”,“Statuspedido”,新 = { CodigoPedido = model.CodigoPedido });```
  • 尝试将model.CodigoPedido 作为您的第三个参数。
  • 模型在动作中无法识别:(
【解决方案2】:

所以我认为最好的做法是在您的 @Html 辅助方法中定义 ActionController,如下所示:

@Html.BeginForm(Action, Controller, FormMethod.Post, htmlAttributes) {
}

然后任何&lt;input type="Submit"&gt; 按钮都会将您的表单提交到指定的ActionController

您的控制器可以是:

public ActionResult Mostrar_Status(CodigoPedidoViewModel model)
{
}

并且CodigoPedido 字段应绑定到该模型为model.CodigoPedido。以下是有关@Html.BeginForm() 的更多信息:How does @Html.BeginForm() work?

【讨论】:

  • 它确实可以很好地重定向到我在另一个控制器中的操作,但是CodigoPedidoViewModel CodigoPedido 返回 null,所以我没有从我的方法中得到任何结果。当我尝试将 Model.CodigoPedido 放入 @Html.BeginForm(Action, Controller, FormMethod.Post, htmlAttributes) { } 作为第四个参数时,我得到空异常。我错过了什么?谢谢你的帮助!
  • 您是否将那行代码放入您的.cshtml 文件中?将Action 替换为您的操作名称,将Controller 替换为您的控制器名称,以及您在第四个参数中可能包含的任何htmlAttribute,例如new { id = "pedidoForm" } 或其他内容。
  • 是的,但正如你所见,我的 .cshtml 中已经有那行代码,我应该放两次吗?
  • @Lucena 您的控制器还需要 CodigoPedidoViewModel 模式作为参数而不是您当前拥有的字符串
  • 我也已经做到了,我不知道该怎么做。 @ 987654339@ 每次我尝试传递一个objectroute 时,我得到model.CodigoPedido 的空引用异常,当我只设置动作、控制器和formmethod 参数时,我无法接收我在另一个控制器的输入按钮中输入的值,即使我在动作中使用CodigoPedidoViewModel CodigoPedido,它仍然返回null,看起来editorfor没有收到任何值:(
【解决方案3】:

这个概念就像@F。 Serna 采样。

您可以在视图中获得模型,通过使用 razor html 帮助器和模型属性设计视图,您将提交模型对象到控制器。如果您没有在表单函数中指定动作和控制器名称,它将被提交给它来自的相同动作,但在 httppost 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多