【问题标题】:MVC User Controls + ViewDataMVC 用户控件 + ViewData
【发布时间】:2010-09-14 12:45:16
【问题描述】:

嗨,我是 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);
}

在我的用户控件中,我想呈现该记录的对象,这就是我的问题。

【问题讨论】:

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


    【解决方案1】:

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

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

    现在在您的用户控件中,ViewData 将是您传入的任何内容...

    【讨论】:

    • 你的意思是 如果您将文件放在共享文件夹中
    【解决方案2】:

    好的,就这样—— 我们使用 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));
    }
    

    我们有一个映射 ajax 调用的 Global.asax.cs 页面。

    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.)
        );
      }
    }
    

    我希望这能让您有一个良好的开端。 祝你好运

    【讨论】:

      【解决方案3】:

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

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

      并且可以从我的 CategoryChooser ViewData 中访问。

      【讨论】:

        【解决方案4】:

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

        在 Visual Studio 2008 中,您可以选择添加项目。在左侧的类别中,您可以选择 Visual C# > Web > MVC。有一个选项 MVC View User Control。选择它,选择一个名称,选择所需的母版页,然后就可以开始了。

        【讨论】:

          猜你喜欢
          • 2010-09-06
          • 2012-01-22
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 2010-11-28
          • 2010-10-02
          • 2010-09-08
          • 2010-09-06
          相关资源
          最近更新 更多