mvc reach editorfor из контроллера по его имени

#asp.net-mvc #asp.net-mvc-4 #editorformodel

#asp.net-mvc #asp.net-mvc-4 #editorformodel

Вопрос:

всем привет, я пытаюсь связаться с EditorFor, указав ему имя. Я дал такое имя

 @Html.EditorFor(model => model.name,new {name = "sizeName"})
  

и я пытаюсь получить его из контроллера

 public ActionResult EditSize(int id,string sizeName)
    {
        Repository<SizeList> _rs = new Repository<SizeList>();
        SizeList _sizeList = _rs.Find(a => a.id == id);

        _sizeList.name = sizeName;
        _rs.Save();

        return RedirectToAction("Size");
    }
  

но он не получил sizeName что я могу сделать для этой благодарности?

Ответ №1:

Вы можете использовать объект модели, временные данные, ViewBag или ViewData для сохранения значения этого объекта, а затем вы можете использовать это для задания имени вашего html-элемента.

Пример контроллера:

 public ActionResult EditSize(int id,string sizeName)
    {
        Repository<SizeList> _rs = new Repository<SizeList>();
        SizeList _sizeList = _rs.Find(a => a.id == id);

        TempData["sizeName"] = sizeName;
        //or ViewBag.sizeName = sizeName;
        //or ViewData["sizeName"] = sizeName;

        _sizeList.name = sizeName;
        _rs.Save();

        return RedirectToAction("Size");
    }
  

Примеры HTML:

 @Html.EditorFor(model => model.name,new {Name = TempData.Peek("sizeName") })
@Html.EditorFor(model => model.name,new {Name = ViewData["sizeName"] })
@Html.EditorFor(model => model.name,new {Name = ViewBag.sizeName })
  

Примечания:

Таким образом вы можете указать имя, только если первая буква заглавная (не ‘name’, а ‘Name’).

Если вы хотите ОПУБЛИКОВАТЬ значение поля для этого конкретного свойства модели, вам не нужно указывать имя элемента, потому что имя устанавливается автоматически вместе с именем свойства модели.

Ответ №2:

потому что с @Html.EditorFor() вы уже задали name, передав model этому помощнику. Этот помощник генерирует HTML-атрибут с помощью name="name" .

Итак, в вашем методе контроллера вы должны иметь:

 public ActionResult EditSize(string name,int id)
    {
        Repository<SizeList> _rs = new Repository<SizeList>();
        SizeList _sizeList = _rs.Find(a => a.id == id);

        _sizeList.name = name;
        _rs.Save();

        return RedirectToAction("Size");
    }
  

и ваш помощник должен выглядеть следующим образом:

 @Html.EditorFor(model => model.name)