Пользовательские элементы управления MVC + ViewData - PullRequest
9 голосов
/ 01 октября 2008

Привет, я новичок в 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);
}

и в моем пользовательском элементе управления я хотел бы отобразить объекты этой записи, и в этом моя проблема.

Ответы [ 4 ]

8 голосов
/ 01 октября 2008

Если я понимаю ваш вопрос, вы пытаетесь передать ViewData в пользовательский элемент управления. Пользовательский элемент управления по сути является частичным представлением, поэтому вы должны сделать это:

<% Html.RenderPartial("someUserControl.ascx", viewData); %>

Теперь в вашем пользовательском контроле ViewData будет тем, что вы передали в ...

1 голос
/ 01 октября 2008

ОК, вот и все - Мы используем данные Json

На странице aspx у нас есть вызов ajax, который вызывает контроллер. Посмотрите доступные параметры для вызовов ajax.

url: Это вызывает функцию в классе. (Очевидно) Наше имя класса - JobController, имя функции - updateJob и не принимает параметров URL-адрес отбрасывает controllerPortion из имени класса. Например, для вызова функции 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.)
    );
  }
}

Надеюсь, это поможет вам хорошо начать. Удачи

0 голосов
/ 01 октября 2008

Не уверен, что я полностью понимаю вашу проблему, но вот мой ответ на вопрос «Как добавить пользовательский элемент управления в проект ASP.NET MVC».

В Visual Studio 2008 вы можете выбрать Добавить элемент. В категориях слева вы можете выбрать Visual C #> Web> MVC. Там есть опция MVC View User Control. Выберите его, выберите имя, выберите нужную главную страницу и все готово.

0 голосов
/ 01 октября 2008

Я почти уверен, что данные просмотра доступны внутри пользовательских элементов управления, если вы расширяете System.Web.Mvc.ViewUserControl и передаете его. У меня есть фрагмент кода:

<%Html.RenderPartial("~/UserControls/CategoryChooser.ascx", ViewData);%>

и из моего CategoryChooser ViewData доступна.

...