MVC用户控件+ ViewData

时间:2008-10-01 13:35:34

标签: asp.net-mvc model-view-controller user-controls viewdata

嗨,我刚接触MVC,我已经四处乱窜,如何构建将ViewData返回给他们的MVC用户控件。我希望有人会就如何解决这个问题提出一步一步的解决方案。如果你能使你的解决方案非常详细,那将会有很大的帮助。

很抱歉我的问题如此离散,我想澄清一下,我最终尝试做的是将id传递给控制器​​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 个答案:

答案 0 :(得分:8)

如果我理解您的问题,那么您正在尝试将ViewData传递给用户控件。用户控件本质上是一个局部视图,因此您可以这样做:

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

现在,在您的usercontrol中,ViewData将是您传入的任何内容......

答案 1 :(得分:1)

好的,它去了 - 我们使用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.)
    );
  }
}

我希望这能让你有个好的开始。 祝你好运

答案 2 :(得分:0)

我非常确定只要您扩展System.Web.Mvc.ViewUserControl并将其传入,就可以在用户控件中访问视图数据。我有一段代码:

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

从我的CategoryChooser ViewData中可以访问。

答案 3 :(得分:0)

不确定我是否完全理解您的问题,但这是我对“如何将用户控件添加到ASP.NET MVC项目”的回答。

在Visual Studio 2008中,您可以选择“添加项”。在左侧的类别中,您可以选择Visual C#&gt;网络&gt; MVC。有一个选项MVC View User Control。选择它,选择一个名称,选择所需的母版页,然后就可以了。