Вспомогательный метод DisplayFor отображает идентификатор объекта, но не передает его в коллекцию форм POST - PullRequest
2 голосов
/ 24 августа 2011

Я почти уверен, что это потому, что форма отправляет только входные данные при отправке формы, нет?

Поэтому, когда я получаю POST-ответ, отредактированное имя принимается правильно, но идентификатор всегда устанавливается равным 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>

Я не хочу позволять пользователям редактировать идентификатор объекта, только имя.

Спасибо.

1 Ответ

5 голосов
/ 24 августа 2011

Как насчет добавления

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

Я думаю, что будет делать то, что вы хотите, если я понимаю ваш вопрос.

...