gpt4 book ai didi

c# - MVC 编辑后重建 ICollection?

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

如果我的模型Product有成员(member)ICollection<ProductOption>如何重建我的 Product 成员集合在我的Controller.Edit(...)Edit 回发的方法?

(我们可以假设我们永远不会添加或删除选项,只会编辑。)

Razor :

@model Models.Products.Product    
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_GlobalLayout.cshtml";
}

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(model => model.Id)
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
@foreach (ProductOption option in Model.Options)
{
<div style="border:1px solid black; margin: 5px; padding:5px 7px;">
@Html.Partial("_ProductOptionInput", option)
</div>
}
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}

Controller :

[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
var p = _repository.ById(id);
UpdateModel<Product>(p);

_repository.SaveChanges();

return RedirectToAction("Index");
}

局部 View :

@modelModels.Products.ProductOption

@Html.ValidationSummary(true)
<fieldset>
<legend>ProductOption</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Term)
</div>
</fieldset>

更新

我的 FormCollectionActionResult Edit(int id, FormCollection collection)本质上是一本字典,所以它有 ProductOption更新的 ProductOption 之一的值s 但不是它们的其余部分,因为键(即 ProductOption s 属性名称)不能在字典中重复。

最佳答案

您要么需要编写自己的模型绑定(bind)器(用于 ICollection<ProductOption> 或将您的实体从数据库中拉出而不是实例化新实例的绑定(bind)器),要么您不能将模型作为参数,而是, 在你的操作方法中将它从数据库中拉出来,然后调用 TryUpdateModel来自 Controller 。

HTH

关于c# - MVC 编辑后重建 ICollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724504/

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