使用JSON [MVC] [C#]发送和接收模型

时间:2011-08-19 18:52:21

标签: c# jquery ajax asp.net-mvc-3 razor

我想创建一些带有过滤器和数据表的视图。 问题在于过滤器,因为它们是动态创建的。

public class TestController : Controller
{

    public ActionResult Test()
    {
        DisplayModel model = new DisplayModel();
        model.Filters = new List<TestFilter>() { new TestFilter() { Name = "Name 1" }, new TestFilter() { Name = "Name 2" }, new TestFilter() { Name = "Name 3" } };
        return View(model);
    }
    public ActionResult JsonChange(List<TestFilter> filters)
    {
        if (filters == null || filters.Count == 0) return PartialView("_Selected", null);
        SelectedModel model = new SelectedModel();
        model.SelectedValues = "";
        foreach (var el in filters)
        {
            model.SelectedValues += (el.Name + " " + el.Value + "<br />");
        }

        return PartialView("_Selected", model);
    }

}

这是我的主要观点     

@model TestReport.Models.DisplayModel
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    $(".submit").click(function () {
        $.ajax({
            url: '/Test/JsonChange/',
            data: '<what should be here>',
            success: function (data) {
                $("#content").html(data);
            }
        });
    });
});
</script>
@foreach (var el in Model.Filters)
{
<div>
    <span>@el.Name</span><span>@Html.TextBoxFor(t => el.Value, null)</span>
</div>
}
<div class="submit" style="border:1px solid black;width:100px;">
Send</div>

这是我的部分视图,将由ajax调用更改:

@model TestReport.Models.SelectedModel
You have selected:
<br />
@if (Model != null && !String.IsNullOrEmpty(Model.SelectedValues))
{
    <text>@Model.SelectedValues</text>
}

最后还有我的模特

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TestReport.Models
{
    public class SelectedModel
    {
        public string SelectedValues { get; set; }
    }
}

和过滤类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TestReport.Entities
{
    public class TestFilter
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }
}

我试图简化整个解决方案,向您展示我的问题。 我想要完成的是发送到控制器方法动态创建的输入框的所有值与ajax作为对象(列表)。 我知道其中一种方法是使用$ .ajax({})方法。但也许它不是最好的解决方案?

1 个答案:

答案 0 :(得分:0)

这是一篇可能解释你的情景的帖子

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx