Вопрос

Привет, я новичок в 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.Выберите его, выберите имя, выберите нужную главную страницу, и все готово.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top