ASP.NET Раскрывающийся список MVC Перенаправляет на представление Eidt

#c# #asp.net #asp.net-mvc

Вопрос:

Я новичок в ASP.NET MVC, пожалуйста, извините меня, если мой вопрос слишком прост.

Мне нужно создать выпадающий список, в котором будут указаны фамилия и имя сотрудника. Когда пользователь выбирает сотрудника из выпадающего списка, мой сайт должен перенаправить пользователя в режим редактирования, который позволит пользователю редактировать запись.

Мой код в контроллере выглядит так:

 public ActionResult Index(string sortOrder, string searchString)
{
    ViewBag.NameList = (from e in db.Employee select e.FirstName   ","   e.LastName);
    return View(employee.ToList());
}

 

И мой взгляд таков:

 <p>
    Fast way: @Html.DropDownList("Edit",  new SelectList(ViewBag.NameList))
    @Html.ActionLink("Edit", "Edit", new SelectList(ViewBag.NameList));
</p>
 

Это в моей модели:

 public int EmployeeId { get; set; }

[Required]
[StringLength(50, MinimumLength = 1)]
public string LastName { get; set; }

[Required]
[StringLength(50)]
public string FirstName { get; set; }
 

Приведенный выше код работает не так, как я ожидал. Страница не может быть перенаправлена. Может быть, мне все еще нужно привязать идентификатор элемента в раскрывающемся списке? Пожалуйста, может ли кто-нибудь помочь мне реализовать эту функцию?

Комментарии:

1. Привет @Вэнь. Если вам нужно перенаправить без нажатия кнопки, вам нужно будет вставить javascript. С нажатием кнопки будет намного проще. Какой метод вы предпочитаете?

2. Привет @YatFeiLeong спасибо за ваш комментарий. Я предпочитаю добавить щелчок по кнопке. Но если вы можете, можете ли вы ввести оба метода? Если нет, просто представьте способ нажатия кнопки. Большое спасибо.

Ответ №1:

Добрый День, Вэнь

Прежде всего, у вас есть результат действия, в котором указан сотрудник, который выглядит так

   public ActionResult Index()
    {

        ViewBag.Emp = new SelectList(( from s in db.Employee.OrderBy(a =>a.Forename)
                                           select new {Id = s.EmployeeID, Name = 
s.Forename    " - "   s.Surname }),
                                           "Id","Name");

        return View();
    }
 

Тогда ваш взгляд будет таким

 <h2>Index</h2>

@using (Html.BeginForm("Edit","Employees",FormMethod.Get))
{

@Html.Label("Employee")
@Html.DropDownList("id",(SelectList)ViewBag.Emp)  
<br />
<input type="submit" value="Edit" />
}
 

Из представления вы можете видеть, что я изменил «Html.BeginFrom», чтобы перенаправить его на Employess/Edit, чтобы он перенаправил его на действие.Результат редактирования сотрудника. Также вы видите, что выпадающий список называется «идентификатор», который является параметром параметра Результата действия редактирования.

Это результат действия редактирования в контроллере

   public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Employee employee = db.Employee.Find(id);
        if (employee == null)
        {
            return HttpNotFound();
        }
        return View(employee);
    }
 

Это так просто!

Комментарии:

1. Да! Спасибо вам за вашу помощь! Если да, можете ли вы представить другой метод? Это такой метод, который не требует кнопок.

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

Ответ №2:

Это пример кода, который перенаправляет на просмотр редактирования при использовании выбора из раскрывающегося списка. Как уже упоминалось, вам нужно только изменить представление. Создайте функцию Javascript, которая отправит эту форму, а затем вызовет функцию при изменении раскрывающегося списка.

Вот код. Проголосуйте за это как за ответ, если это касается вашей проблемы

 @model IEnumerable<Incendo.Entities.Employee>

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

@using (Html.BeginForm("Edit", "Employees", FormMethod.Get, new { id = "TransPost" }))
{

@Html.Label("Employee")
@Html.DropDownList("id", (SelectList)ViewBag.Emp, " ", new {@onchange = "postTrans()" 
})
<br />
<input type="submit" value="Edit" />
}


@section scripts{
<script>
    function postTrans() {
        
        document.getElementById("TransPost").submit();
    }
</script>



}
 

Комментарии:

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

2. Пожалуйста, проголосуйте за это как за ответ, если это работает для вас

3. Я так и сделаю, но я новичок в stackflow. Поэтому у меня недостаточно репутации. Я могу только отметить, что ответ был принят. Но я вернусь, чтобы проголосовать за ваш ответ, когда у меня будет достаточно репутации. Еще раз спасибо за вашу помощь.