2016-12-23 3 views
0

Мой PartialView:MVC5 Как сделать сообщение из частичного просмотра?

@model Alina_2017.Models.DropDownModel 

<h2>Groepen</h2> 
<div> 


    <div> 
     @using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController")) 
     { 
      @Html.DropDownListFor(x => x.selectedItem, new SelectList(ViewBag.groepen, "id", "Naam"), "Select", new { @class = "form-control" }) 
      <input type="submit" id="zoekgroep" value="Zoeken" /> 
     } 
    </div> 
</div> 

Мой главный вид:

@model Alina_2017.Models.WerkvormModel 

@{ 
    ViewBag.Title = "Index"; 
} 

@Html.Partial("~/Views/DropDown/Groepen.cshtml") 

//More irrelevant html 

Мой контроллер:

public ActionResult Index() 
{ 


    ViewBag.groep1 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 1).ToList()); 
    ViewBag.groep2 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 2).ToList()); 
    ViewBag.groep3 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 3).ToList()); 
    setViewBags(); 
    return View(); 
} 

[HttpPost] 
public ActionResult SelectGroup(DropDownModel model) 
{ 
    // the value is received in the controller. 
    var selectedItem = model.selectedItem; 
    Debug.WriteLine(selectedItem); 
    return View("Index"); 
} 

Я получаю HTTP Error 404.0 - Not Found. Можно ли вызвать действие с другого контроллера? Причина в частичном представлении заключается в том, что я использую две разные модели +, я буду использовать частичное представление в нескольких других представлениях (по крайней мере, как только я получу его для работы).

ответ

1

Неправильное имя вашего контроллера.

Заменить

@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController")) 

с

@using (Html.BeginForm("SelectGroup", "Werkvorm")) 

Вы можете проверить фактический почтовый адрес, если вы смотрите на источник в браузере или проверить вкладку сети в инструменты разработки браузера.

+0

Спасибо! Сначала я попробовал это, но вместо Werkvorm поместил WerkvormController, поэтому я использовал полный путь. Это имеет смысл сейчас, спасибо :) – user3117628

2

Второй аргумент метода BeginForm() это просто имя контроллера, а не его файл:

@using (Html.BeginForm("SelectGroup", "Werkvorm")) 
{ 

} 

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

В качестве учебного упражнения изучите фактическую визуализированную разметку в средствах отладки вашего браузера и посмотрите URL-адреса, созданные для форм. Независимо от того, как упорядочены частичные представления, какой контроллер вернул представление, какие модели и т. Д. ... В конце концов, это всего лишь HTML. Вы даже можете вручную написать простой файл .html с формой на нем, которая успешно отправляет серверное ASP.NET MVC-действие.

+0

Спасибо за ваш ответ, обязательно проверьте! – user3117628

Смежные вопросы