gpt4 book ai didi

c# - POST 操作后 Controller 中的模型键和外键参数为空

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:12 25 4
gpt4 key购买 nike

我的 View 中有以下隐藏字段:

@Html.HiddenFor(model => model.cat.Id)
@Html.HiddenFor(model => model.cat.OwnerId)
@Html.HiddenFor(model => model.cat.BirthDate
@Html.HiddenFor(model => model.cat.Weight)

Id 是一个键,OwnerId 是一个外键。当我尝试编辑该模型时,所有值都正确显示,但问题是当我尝试将这些值发回时。 Id 和 OwnerId 始终为 0。我的 View 中还有很多其他值,例如下拉列表、文本框等,所有这些值都已正确发布。问题仅在于 Id 和 OwnerId。

Controller :

[HttpPost]
public ActionResult Edit(EditCatDetailsViewModel model)
{
Debug.WriteLine("Cat Id: " + model.cat.Id); //displays 0
}

我检查了网站的来源,发现 Id 和 OwnerId 的值正确(值不是 0)。我的问题是为什么这些值不像所有其他值一样发送?为什么它们在 Controller 中接收为 0?

谢谢!

更新:

Cat 编辑 View :

@model Pro.Web.Models.EditCatDetailsViewModel

@{
ViewBag.Title = "Edit";
}

<h2>Edit Cat Details</h2>

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)

<fieldset>
<legend>Cat</legend>

@Html.HiddenFor(model => model.cat.Id)
@Html.HiddenFor(model => model.cat.OwnerId)
@Html.HiddenFor(model => model.cat.BirthDate
@Html.HiddenFor(model => model.cat.Weight)

<div class="editor-label">
@Html.LabelFor(model => model.cat.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.cat.Name)
@Html.ValidationMessageFor(model => model.cat.Name)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.cat.Description)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.cat.Description, new { @style="width:400px; height:600px" })
@Html.ValidationMessageFor(model => model.cat.Description)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.cat.NumberOfKittens)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.cat.NumberOfKittens)
@Html.ValidationMessageFor(model => model.cat.NumberOfKittens)
</div>

<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}

<div>
@Html.ActionLink("Back to Details", "Details")
</div>

最佳答案

最后我设法做到了这一点。我在我的 EditCatDetailsViewModel 中放置了额外的变量,它表示猫的 ID。

这是该模型的简化外观:

public class EditCatDetailsViewModel
{
public Cat cat { get; set; }
public int catId { get; set; }

}

在我的 GET Edit 方法中,我从 Cat 模型中的 Id 设置了该 Id:

// GET: /Cats/Edit/5

public ActionResult Edit(int id = 0)
{
Cat cat = _catRepository.Find(id);

if (cat == null)
{
return HttpNotFound();
}

EditCatDetailsViewModel model = new EditCatDetailsViewModel();
model.cat = cat;
model.catId = cat.Id;

return View(model);
}

在我的 View 中我添加了额外的隐藏元素:

@Html.HiddenFor(model => model.catId)

现在我可以在 POST 方法中访问该 Id:

[HttpPost]
public ActionResult Edit(EditCatDetailsViewModel model)
{
Debug.WriteLine("Cat Id: " + model.catId); //displays correct Id for Cat!!!
model.cat.Id = model.catId;
}

现在一切正常,我可以将更改保存到我的数据库中。我仍然对为什么没有在第一次发布这些值感兴趣。

关于c# - POST 操作后 Controller 中的模型键和外键参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com