DisplayFor 辅助方法呈现实体的 ID,但不会将其传递到 POST 表单集合

发布于 2024-12-01 08:11:08 字数 1617 浏览 1 评论 0原文

我很确定这是因为表单仅在提交表单时发布输入,不是吗?

因此,当我收到 POST 响应时,我编辑的名称被正确接收,但 ID 始终设置为 0。

有什么解决方法吗?

public ActionResult Edit(int id)
{
    var productBrand = brandRepo.FindProductBrand(id);
    ProductBrandModel model = Mapper.Map<ProductBrand, ProductBrandModel>(productBrand);
    return View(model);
}

[HttpPost]
public ActionResult Edit(ProductBrandModel model)
{
    if (ModelState.IsValid)
    {
        var productBrand = brandRepo.FindProductBrand(model.ProductBrandId);
        productBrand.Name = model.Name;
        brandRepo.SaveChanges();
        return RedirectToAction("Index", "ProductBrands");
    }
    return View(model);
}


/* THIS IS THE VIEW*/

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ProductBrandModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductBrandId)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.ProductBrandId)
        </div> 

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

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

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

我不想让用户编辑实体的 ID,而只能编辑名称。

谢谢。

I'm pretty sure this is because the form only POSTS inputs when submitting a form, no?

So when I recieve a POST response, the name I edited is correctly received but the ID is always set to 0.

Any workarounds?

public ActionResult Edit(int id)
{
    var productBrand = brandRepo.FindProductBrand(id);
    ProductBrandModel model = Mapper.Map<ProductBrand, ProductBrandModel>(productBrand);
    return View(model);
}

[HttpPost]
public ActionResult Edit(ProductBrandModel model)
{
    if (ModelState.IsValid)
    {
        var productBrand = brandRepo.FindProductBrand(model.ProductBrandId);
        productBrand.Name = model.Name;
        brandRepo.SaveChanges();
        return RedirectToAction("Index", "ProductBrands");
    }
    return View(model);
}


/* THIS IS THE VIEW*/

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ProductBrandModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductBrandId)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.ProductBrandId)
        </div> 

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

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

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

I don't want to let the users edit the ID of the entity, only the name.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╄→承喏 2024-12-08 08:11:09

怎么样?

添加@Html.HiddenFor(model => model.ProductBrandId)

如果我理解你的问题,我认为这会达到你想要的效果。

What about adding

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

I think that will do what you want, if I understand your question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文