Пользовательские элементы управления MVC + ViewData
-
03-07-2019 - |
Вопрос
Привет, я новичок в MVC, и я безуспешно пытался создать пользовательские элементы управления MVC, к которым возвращались ViewData.Я надеялся, что кто-нибудь опубликует пошаговое решение этой проблемы.Если бы вы могли сделать свое решение очень подробным, это бы очень помогло.
Извините за столь сдержанный вопрос, я просто хотел бы уточнить, что в конечном итоге я пытаюсь передать идентификатор методу actionresult контроллера и хочу передать его пользовательскому элементу управления непосредственно из самого контроллера.Я не уверен, с чего начать этот подход, и мне интересно, возможно ли это вообще.По сути, в моем воображении это будет выглядеть так
public ActionResult RTest(int id){
RTestDataContext db = new RTestDataContext();
var table = db.GetTable<tRTest>();
var record = table.SingleOrDefault(m=> m.id = id);
return View("RTest", record);
}
и в моем пользовательском элементе управления я хотел бы отобразить объекты этой записи, и это моя проблема.
Решение
Если я понимаю ваш вопрос, вы пытаетесь передать ViewData в пользовательский элемент управления.Пользовательский элемент управления по сути представляет собой частичное представление, поэтому вы должны сделать следующее:
<% Html.RenderPartial("someUserControl.ascx", viewData); %>
Теперь в вашем пользовательском элементе управления ViewData будет все, что вы передали...
Другие советы
ОК, вот и это - мы используем данные JSON
На странице aspx у нас есть вызов ajax, который вызывает контроллер.Найдите доступные параметры опций для вызовов ajax.
URL:Это вызывает функцию в классе. (очевидно) Имя нашего класса — JobController, имя функции — updateJob, и она не принимает никаких параметров.URL-адрес удаляет контроллерную часть из имени класса.Например, для вызова функции updateJob URL будет иметь вид «/Job/UpdateJob/».
var data = {x:1, y:2};
$.ajax({
data: data,
cache: false,
url: '/ClassName/functionName/parameter',
dataType: "json",
type: "post",
success: function(result) {
//do something
},
error: function(errorData) {
alert(errorData.responseText);
}
}
);
В классе JobController:
public ActionResult UpdateJob(string id)
{
string x_Value_from_ajax = Request.Form["x"];
string y_Value_from_ajax = Request.Form["y"];
return Json(dataContextClass.UpdateJob(x_Value_from_ajax, y_Value_from_ajax));
}
У нас есть страница Global.asax.cs, которая отображает вызовы ajax.
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "EnterTime", action = "Index", id = "" } // Parameter defaults (EnterTime is our default controller class, index is our default function and it takes no parameters.)
);
}
}
Надеюсь, это послужит вам хорошим началом.Удачи
Я почти уверен, что данные представления доступны внутри пользовательских элементов управления, если вы расширяете System.Web.Mvc.ViewUserControl и передаете их.У меня есть фрагмент кода:
<%Html.RenderPartial("~/UserControls/CategoryChooser.ascx", ViewData);%>
и изнутри моего CategoryChooser ViewData доступен.
Не уверен, что я полностью понимаю вашу проблему, но вот мой ответ на вопрос «Как добавить пользовательский элемент управления в ваш проект ASP.NET MVC».
В Visual Studio 2008 вы можете выбрать «Добавить элемент».В категориях слева вы можете выбрать Visual C# > Интернет > MVC.Есть опция MVC View User Control.Выберите его, выберите имя, выберите нужную главную страницу, и все готово.