在Html.BeginForm

时间:2018-01-03 12:59:20

标签: c# post razor model-view-controller textbox

我正在尝试通过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相同,解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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