Как редактировать объекты с другими, т.е. IList <object>или простым объектом, прикрепленным к нему? - PullRequest
1 голос
/ 10 августа 2010

Привет, я застрял на том, как сделать это наилучшим образом.В моем случае я получил продукт, а он получил объект производителя.

Итак, я передаю продукт в представление для редактирования.Но когда я сохраняю данные, я смотрю на объект продукта, и производитель становится пустым.Я пытался создать скрытый объект для объекта-производителя, как и идентификатор продукта, но это не сработало.Как лучше всего это сделать?

надеюсь, вы понимаете, о чем я?

public ActionResult EditProduct(int id)
    {
        var product = _productService.GetById(id);
        return View(product);
    }

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditProduct(Product product)
    {
        //_productService.SaveOrUpdate(product);
        TempData[Message] = product.ProductName + " have been saved";

        return RedirectToAction("Products");
    }

РЕДАКТИРОВАТЬ

Product Object

public virtual int Id { get; set; }
public virtual string ProductName { get; set; }   
public virtual Manufacturer Manufacturer { get; set; }

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

попробуйте это в вашем View

поместите скрытое поле для Manufacturer.Id, если это первичный ключ вашего производителя

<%=Html.HiddenFor(m=>m.Manufacturer.Id, new { @value=Model.Manufacturer.Id }) %>

, это даст вам значение для вашего объекта производителя вваш продукт.Теперь вам просто нужно повторно связать вашего производителя, прежде чем сохранить его, поскольку у вас есть первичный ключ вашего производителя.

0 голосов
/ 10 августа 2010

Из того, что вы говорите, я думаю, что проблема в том, в каком контексте вы пытаетесь сохранить ваш продукт.Когда вы объявляете его как

public ActionResult EditProduct(Product product)

, оно не имеет того же «значения», что и

var product = _productService.GetById(id);

, поскольку в нем отсутствует контекст вашей базы данных.Поэтому я предлагаю вам сделать следующее:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditProduct(int id)
{       
    var product = _productService.GetById(id);
    UpdateModel(product);
    _productService.SaveOrUpdate(product);
    TempData[Message] = product.ProductName + " have been saved";

    return RedirectToAction("Products");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...