在Html.BeginForm中发送多个对象

问题描述 投票:0回答:2

我正在尝试通过FormMethod.Post发送多个对象,但问题是只保存第一个的值,第二个的值与第一个相同。问题可能在Razor语法中,我很陌生,这是我正在使用的代码:

@using (Html.BeginForm("chAdress", "Adress", FormMethod.Post))
{
      @Html.Label("Number")
      @Html.TextBoxFor(model => model.Number)
      @Html.ValidationMessageFor(model => model.Number)

      @Html.Label("Distance")
      @Html.TextBoxFor(model => model.Distance)
      @Html.ValidationMessageFor(model => model.Distance)

      @Html.Label("New Number")
      @Html.TextBoxFor(model1 => model1.Number)
      @Html.ValidationMessageFor(model1 => model1.Number)

      @Html.Label("New Distance")
      @Html.TextBoxFor(model1 => model1.Distance)
      @Html.ValidationMessageFor(model1 => model1.Distance)
      <button type="submit">Change Adress</button>
 }

以下是应该进行更改的控制器:

public void chAdress(Adress model, Adress model1)
{
            prepareConnection();

            string distance = model.Distance.ToString();
            string newDistance = model1.Distance.ToString();

            Dictionary<string, object> queryDict = new Dictionary<string, object>();
            queryDict.Add("distance", distance);
            queryDict.Add("newDistance", newDistance);

            var query = new Neo4jClient.Cypher.CypherQuery("start n=node(*) where (n:Adress) and exists(n.distance) and n.distance =~ {distance} set n.distance = {newDistance} return n",
                                                            queryDict, CypherResultMode.Set);

            List<Adress> adrese = ((IRawGraphClient)client).ExecuteGetCypherResults<Adress>(query).ToList();
 }

在调试模式下运行后,我看到distance的值始终与newDistance相同,解决此问题的最佳方法是什么?

c# post razor model-view-controller textbox
2个回答
3
投票

视图只能键入一个模型。您似乎正在尝试在视图中引用Model和Model1。您应该创建一个新的ViewModel以包含要从表单返回的所有属性,然后根据需要将其从控制器处理到您需要的不同对象。

由于您实际上只有一个模型(但试图像2那样使用它),因此您将覆盖先前设置值的属性。


0
投票

POST方法将始终使用属性名称来提交数据。事件尽管你有2个不同的模型,但它仍然具有相同的属性名称,它将始终被最新的属性值覆盖,在这种情况下是新的newDistance。将新属性名称newDistance添加到model.newDistance之类的模型,或者创建一个名为newDistance的不同模型,如model1.newDistance。

© www.soinside.com 2019 - 2024. All rights reserved.