将信息从视图传输到控制器

时间:2015-06-03 08:26:04

标签: c# asp.net-mvc session

我正在使用asp-mvc应用程序并面临以下问题: 我有一个具有简单属性的模型加上一个属性,它是我的自定义对象的列表,我呈现如下所述的Ienumerable属性: Passing IEnumerable property of model to controller post action- ASP MVC

在我看来,我有一个按钮,应该将项目添加到我的模型的ienumerable属性中。当然,我不想丢失已插入的数据,因此我需要将模型传递给相应的操作。

我注意到模型os完全只在帖子上传输。所以,我做了类似的事情:

 $(".addButton").click(function (event) {
        event.preventDefault();
        $("#FilterForm").submit();
        @{ Session["fromAddFullItem"] = "true";}
        return false;
      });

然后在我的控制器中,我做了类似的事情:

public ActionResult Index(FilterModel model)
    {
        if (Session["fromAddFullItem"].ToString() == "true")
        {
            Session["fromAddFullItem"] = "false";
            return AddBlankItemTemplate(model);
        }

我已经知道不建议在js中分配会话,但也尝试过TempData,并且数据始终为空。

我的问题是Session [" fromAddFullItem"]总是正确的,即使我来自另一个按钮。如果我在addbtn中放置断点,请单击“会话”[" fromAddFullItem"] =" false";,然后按另一个按钮,我看到由于某些奇怪的原因,所提到的断点被击中即使我没有按下添加按钮。

有任何帮助吗?也许有另一种方法来实现我想要的。目前,无论我按哪个按钮(发布表格),它都会作为Session [" fromAddFullItem"] =" false"并采取行动AddBlankItemTemplate。感谢。

编辑 - AJAX POST

    $(".addButton").click(function(event) {
        event.preventDefault();
        var modelData = JSON.stringify(window.Model);
        $.ajax({
            url:  '@Url.Action("AddBlankItemTemplate")',
            type: 'POST',
            dataType: 'json',
            data: modelData,
            contentType: 'application/json; charset=utf-8',

        });
        return false;
    });

和控制器

public ActionResult AddBlankItemTemplate(string modelData)

编辑2:

       $(".addButton").click(function (event) {
        event.preventDefault();
        $.ajax({
            url: '@Url.Action("AddBlankItemTemplate")',
            data: $("#FilterForm").serialize()
        }).success(function(partialView) {

            $('DetailsTemplates').append(partialView);
        });
    });

和控制器:

public ActionResult AddBlankItemTemplate(FilterModel model)

1 个答案:

答案 0 :(得分:2)

@{ Session["fromAddFullItem"] = "true";}行是Razor代码,无论您将其放在页面的哪个位置,都会在页面呈现和加载时运行。

这不是客户端代码,所以不会等待你的js代码运行。如果你试图在js和MVC之间同步状态,你可以查看angularjs,它可以简化这些操作。