Как я могу получить HTML из HTML.DropDownList в контроллере - PullRequest
0 голосов
/ 22 декабря 2011

Я хочу получить HTML из Html.DropDownList в контроллере.Это код, который у меня пока есть:

var binMasters = repository.LoadBinsByZone(12345);
var ddl = new SelectList(binMasters, "BinID", "BinCode");
string result = ddl.ToString();
return result;

Результат - «System.Web.Mvc.SelectList» вместо HTML.Как я могу получить HTML из Html.DropDownList в контроллере?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2011

Почему вы просто создаете метод в вашем контроллере, который возвращает результат действия, который представляет собой HTML, связанный с представлением, которое вы хотите отрендерить

//this if you want get the html by get
public ActionResult Foo()
{
    return View();
}

И клиент вызывается так

$.get('your controller path', parameters to the controler , function callback)

или

$.ajax({
    type: "GET",
    url: "your controller path",
    data: parameters to the controler
    dataType: "html",
    success: your function
    });

Также вы можете загружать частичные представления и визуализировать в определенных частях вашего представления с помощью jquery-загрузки, которая не более чем ajax с именем

1 голос
/ 22 декабря 2011

В контроллере нет «HTML DropDownList». HTML не отображался, пока не прошел просмотр. (На самом деле, вы не должны иметь какое-либо отношение к необработанному HTML или любой функциональности уровня просмотра в контроллере. Эти проблемы должны быть четко разделены.)

Причина, по которой он показывает вам "System.Web.Mvc.SelectList", заключается в том, что вы вызываете .ToString() для ссылочного объекта (ddl, который имеет тип System.Web.Mvc.SelectList). Поведение по умолчанию .ToString на object - возвращать имя класса. (Это имеет смысл, учитывая, что object не знает, какие другие функции могут представлять его потомки.)

Остается еще больший вопрос ... Почему вам нужно это сделать? Как я уже сказал, Контроллер не должен знать или заботиться о представлении, которое будет сгенерировано из него. Действительно, контроллер должен быть повторно использован и для других представлений. Поэтому мне приходит в голову, что, возможно, есть гораздо лучший способ решить коренную проблему, с которой вы столкнулись, если мы сделаем шаг назад.

0 голосов
/ 22 декабря 2011

Попробуйте

var Html = new HtmlHelper(new ViewContext(ControllerContext, new WebFormView(""), new ViewDataDictionary(), new TempDataDictionary()), new ViewPage());
var result = Html.DropDownList("dropDownList", ddl).ToHtmlString();
...