我正在尝试通过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相同,解决此问题的最佳方法是什么?
答案 0 :(得分:3)
视图只能输入一个模型。您似乎正在尝试在视图中引用Model和Model1。您应该创建一个新的ViewModel以包含要从表单返回的所有属性,然后,如果需要,将其从控制器处理到您需要的不同对象。
由于您实际上只有一个模型(但尝试使用它,如2),您将覆盖先前设置值的属性。
答案 1 :(得分:0)
POST方法将始终使用属性名称来提交数据。事件尽管你有2个不同的模型,但它仍然具有相同的属性名称,它将始终被最新的属性值覆盖,在这种情况下是新的newDistance。将新属性名称newDistance添加到model.newDistance之类的模型,或者创建一个属性名称为newDistance的其他模型,如model1.newDistance。