2017-02-13 24 views
0

Я выполнил поиск в базе данных, используя другое поле. В базе данных всего 1 элемент.Идентификатор сущности не был правильно отображен из базы данных во время редактирования

var product= db.products.FirstOrDefault(x => x.nonID == id); 
     return product; 

фактический идентификатор элемента, например, было: 112 nonID был 888

, когда это было возвращение для просмотра с строки запроса ID = 888

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

скрытое поле было на карте to nonID вместо сопоставления фактическому идентификатору в базе данных, которая была восстановлена.

Это вызвало у меня проблему с сохранением, когда идентификатор не найден. кто-нибудь знает, почему это происходит? продукт класса

public class product 
{ 

    [Display(Name = "ID")] 
    [Required(ErrorMessage = "Required.")] 
    public long ID { get; set; } 

    [Display(Name = "Search No")] 
    [Required(ErrorMessage = "Required.")] 
    public string nonID { get; set; } 

детали страницы для редактирования страницы событие

<input type="button" class="btn btn-info" value="Edit" onclick="location.href='@Url.Action("Edit","Product",new { id = Model.nonID})'" /> 


    public Product GetProductDetails(string id) 
    { 

     Product product = db.Products.FirstOrDefault(x => x.nonID == id); 

     return product; 
    } 

редактировать страницу Скрытое поле

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

страница редактирования строки запроса

Product/Edit/888 

редактировать страницу детали получать продукт

public ActionResult Edit(string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     var product = service.GetProductDetails(id); 
     ViewBag.type = new SelectList(service.GetAllProductLibrary(), "ProductTypeID", "ProductTypeName", product.type); 
     if (product == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(product); 
    } 

при сохранении редактирования элемента. объект предполагается использовать идентификатор 112, чтобы сохранить .Но идентификатор не был на карту для просмотра во время заполнения

+0

Вам необходимо показать код в вашем методе контроллера, а модель –

+0

добавила коды –

+0

Вы по-прежнему не указали код для метода 'Edit' GET (который является самым важным битом) –

ответ

1

Вашего вопроса в том, что метод Edit имеет имя параметр id, который добавляется к ModelState при вызове методы. Все HtmlHelper методы, которые генерируют элементы управления формы использует значение из ModelState установить атрибут value, если они существуют, так потому, что значение вашего параметра 888, вход генерируемого

<input .... value="888" /> 

Вы можете решить эту проблему путем добавления ModelState.Clear() до того возвращая представление, что означает, что метод HiddenFor() будет использовать значение вашего свойства.

альтернатива решением было бы изменить метод

public ActionResult Edit(string nonID) 

и использовать @Url.Action("Edit","Product",new { nonID = Model.nonID}) в представлении. И если вы хотите вывести ../Product/Edit/xxx, а не ../Product/Edit?nonID=xxx, то вы можете создать определенное определение маршрута.

+0

Спасибо. Я использовал второй подход, изменив параметр редактирования, и проблема исчезла. Я всегда думал, что это всего лишь параметр. Да, это повлияет на совокупность представлений –