我有this same problem與我的代碼,我想避免副作用,而不改變我的變量名稱。id是從URL參數,而不是從模型
即:
我的網址是(...)/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>
這form-group
,雖然id
是在模型null
,示出了從GET
的id
。在我的情況下,這種行爲是意想不到的並且是不希望的
有沒有辦法阻止這種不良行爲,只使用模型?
UPDATE
控制器的相關部分:
[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
@trailmax入口點是GET操作:'(...)/ MarriageByPersonId?id = 231'。然後調用另一個顯示視圖的私有函數。該視圖顯示錶單,其中包含無效的「id」(取自「GET模式參數」而不是「@model Marriage」)。 –
你可以顯示你的控制器方法嗎? –