【问题标题】:Html.BeginForm posting a different modelHtml.BeginForm 发布不同的模型
【发布时间】:2020-02-08 00:27:18
【问题描述】:

我有一个过滤面板的部分视图,例如:

@model TabNetMVC.Models.FixedAsset.BarcodeTrackingModel
@using (Html.BeginForm("ApprovalList", "BarcodeTracking", FormMethod.Post))
{

    @Html.DropDownListFor(model => model.RestaurantNo, Model.Restaurants, new { @class = "form-control", id = "restDropDown" })
    <input onclick="" type="submit" name="name" value="Apply Filter" />
}

在这里,我收到了一个类型为 BarcodeTrackingModel 的模型,然后通过 Model.Restaurants 将餐厅名称填充到我的下拉列表中。 Model.RestaurantsSelectListItem 类型对象的列表。我希望用户选择一家餐厅,然后此选择的值将被覆盖在现有模型的 RestaurantNo 属性上。为此,我将一个表达式作为第一个参数传递给我的DropDownListFor 方法,如下所示; model =&gt; model.RestaurantNo。我的问题是,每当我单击“应用过滤器”按钮并提交表单时,模型都会传递给 Action 方法,ApprovalList 的所有属性都为空,除了RestaurantNo 属性。因此,只有下拉列表中的选定值被传递给 action 方法,而现有模型上的另一个数据会丢失。换句话说,表单发布的模型与其使用的现有 Model 不同。下面是动作方法;

[HttpPost]
        public ActionResult ApprovalList(BarcodeTrackingModel model)
        {
            model.ProductList = model.ProductPagedList.Where(p => p.RestaurantNo == model.RestaurantNo).ToList();

            return View("~/Views/BarcodeTracking/List.cshtml", model);
        }

什么可能导致这个问题?提前致谢。

【问题讨论】:

  • 在您的示例中,提交将仅发布​​在您的表单的 {} 之间的 RestaurantNo,如果您有任何其他属性并且您不想显示它,请使用隐藏字段,否则您可以使用 Jquery发布此属性
  • @Amine,我想发回整个同一个模型,只有 RestaurantNo 字段填写。
  • 如果您想发布 RestaurantNo,您所做的应该可以,但是如果您想发布所有模型(许多文件),您应该对所有属性使用隐藏字段或使用 TempData["Model"]=你的模型。

标签: c# asp.net-mvc razor


【解决方案1】:

您只发送表单中的信息,在这种情况下,您发送的唯一数据是

model.RestaurantNo

您可以从隐藏字段发送更多参数,但我不明白您要完成什么,抱歉没有提供更多帮助。

【讨论】:

  • 为了扩展 Edgar 所说的内容,仅发送位于 &lt;form&gt;&lt;/form&gt; 标记内的表单字段。无论您使用什么语言/框架(ASP.NET、PHP、JSP、Ruby 等),这都是正确的。所以你想要做的可能是在表单中输入一个Html.HiddenFor(model =&gt; model.Id),然后在你的控制器操作中,从数据库中获取数据,然后返回产品列表。
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 2015-01-08
  • 2020-01-31
  • 1970-01-01
  • 2014-07-14
  • 2023-04-08
相关资源
最近更新 更多