【问题标题】:asp.NET MVC Pass Informations to PartialViewasp.NET MVC 将信息传递给局部视图
【发布时间】:2014-04-16 11:59:55
【问题描述】:

我正在开发一个基于 asp.NET MVC 5 的应用程序

此应用程序从本地 Web 服务下载大量数据并应将其显示出来。 因为数据多,所以我通过局部视图调用webservice,像这样:

<div class="partialContents" id="partialContent" data-url="/Home/Action">
   Loading...
</div>

这是使用以下 JS 代码异步加载的:

$(document).ready(function (e) {
        $(".partialContents").each(function (index, item) {
            var url = $(item).data("url");
            if (url && url.length > 0) {
                $(item).load(url);
            }
        });
    });

这符合预期。

但是现在我必须将表单的值传递给这个局部视图。 我知道我可以像往常一样传递参数,例如对/Home/Action/Params 的请求,但我必须传递许多参数,其中一些可能未设置或为空或为空。 因此,我寻找将 ViewBag 的对象或值或类似的东西传递给局部视图的可能性。

是否有可能在我的代码中将模型对象传递给控制器​​? 数据必须送到控制器进行进一步验证等。我知道我可以将模型传递给视图本身,但我需要控制器中的这些数据。

我的控制器访问如下:

public ActionResult Index()
    {
        //Do things
        return View(model);
    }

public ActionResult Action()
    {
        //Validate the Form-Data
        //Download Data from Webservice
        return PartialView("MyPartialView", model);
    }

任何帮助或提示将不胜感激。

也许我必须编辑 Javascript 代码,但我通常不会用 JS 编写代码,所以我有以下来源的代码(按照他的教程):blog.michaelckennedy.net

//附加信息

我的 ViewModel 如下所示:

public class PostForm
    {
        public string DatumVon { get; set; }
        public string DatumBis { get; set; }
        public string Werk { get; set; }
        public string Pruefplatz { get; set; }
        public string Auftrag { get; set; }
        public string Gueltig { get; set; }
    }

我的 Java 请求是这样的:

$(item).load(url, {"DatumVon":dateVon, "DatumBis":dateBis, "Werk":werk, "Pruefplatz":pruefplatz, "Auftrag":auftrag, "Gueltig":gueltig});

【问题讨论】:

    标签: c# javascript asp.net asp.net-mvc parameter-passing


    【解决方案1】:

    如果您有很多参数要传递给操作方法,请创建一个包含这些参数的模型。例如,我在下面创建了 MyParamModel 类:

     public class MyParamModel
     {
        //Your parameters go here
        public int IntProperty { get; set; }
        public string StringProperty { get; set; }
     }
    

    然后修改action方法接受这个类作为参数。

    public ActionResult Action(MyParamModel model)
    

    修改脚本中的 load 调用,像这样将信息传递给 url。

    $(item).load(url, {"IntProperty":1, "StringProperty": "test"});
    

    在控制器端拥有模型后,您可以相应地对其进行验证。 希望这可以帮助。如果是,请将其标记为答案。

    【讨论】:

    • 感谢您的回答。这似乎可行。由于复活节周末,我将在星期三尝试您的解决方案。如果可行,我会将您的解决方案标记为正确;)
    • 我尝试了您的解决方案。如果我完全像你一样,它会终止并告诉我No parameterless constructor defined for this object. 但是在请求正文中,我看到了数据。所以我试图通过使用Request.Form-Collection 来实现它,但这只会返回,嗯,什么都没有。甚至不是空字符串也不是 null。
    • 你能提供你的视图模型的代码吗?我希望您的模型没有没有参数的构造函数。
    • Phani Vankadari:我更新了我的问题以反映您的要求。几秒钟前,我解决了这个问题:因为我的控制器是用参数实现的:public ActionResult Action(PostForm form) 但它想要一个没有参数的方法,比如public ActionResult Action() 你知道,为什么会这样吗?
    • @stueliueli:这些是您描述的错误的链接。检查它们是否有帮助。 stackoverflow.com/questions/1355464/…stackoverflow.com/questions/16759296/…
    猜你喜欢
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多