【发布时间】:2017-02-17 13:09:07
【问题描述】:
我的代码中有this same problem,我想在不更改变量名的情况下避免副作用。
即:
我的网址是(...)/MarriageByPersonId?id=231
这会搜索Person 并创建一个新的Marriage 对象(带有Marriage.id = null)。
它终于以Model=Marriage到达视图:
<div class="form-group">
@Html.LabelFor(m => m.id)
@Html.TextBoxFor(m => m.id, new { @class = "form-control", @readonly = "readonly" })
@Html.ValidationMessageFor(m => m.id)
</div>
虽然id 在模型中是null,但此form-group 显示id 来自GET。在我的情况下,这种行为是意外且不受欢迎的。
有没有办法阻止这种不良行为并仅使用该模型?
更新
控制器的相关部分:
[HttpGet]
public ActionResult MarriageByPersonId(int id)
{
var person = _personRepository.GetById(id);
var marriage = _marriageRepository.GetById(person.marriage_id);
return Marriage(marriage);
}
private ActionResult Marriage(Marriage marriage)
{
var people = _personRepository.GetAll();
ViewBag.men = Utils.GetPersonsSelectListByGender(people, isMale: true);
ViewBag.women = Utils.GetPersonsSelectListByGender(people, isMale: false);
return View(nameof(MarriageController.Marriage), marriage);
}
【问题讨论】:
-
您是否通过 POST 提交表单?接收操作是否标记为 POST-only?
-
@trailmax 入口点是一个 GET 操作:
(...)/MarriageByPersonId?id=231。然后调用另一个显示视图的私有函数。该视图显示了无效的id表单(取自 GET 参数而不是@model Marriage)。 -
你能展示你的控制器方法吗
-
@PatrickMcvay 我已经用控制器方法更新了这个问题。我通过在
HttpGet操作中将id更改为personId解决了这个问题。我认为这是一个“危险的陷阱”。这不直观,我仍然对避免这种情况的通用方法感兴趣。 -
我不知道这会起作用,但是您是否尝试过在婚姻操作中接受 id 参数?私人 ActionResult 婚姻(int id,婚姻婚姻)
标签: c# asp.net asp.net-core