ViewModel当前状态为JSON

时间:2016-10-21 08:27:59

标签: javascript c# jquery asp.net-mvc

我遇到了aps.net mvc项目的问题。我有一个视图,其中设置了开始表单内的复选框列表,然后提交相应的字段显示为报告。所以我必须在我的视图中添加一个按钮,用户可以在其中设置他想要查看的字段,这样他就可以将所有复选框值保存为带有名称的预设。

我有很多嵌套模型的模型,如下所示:

 public class EmployeeOverallReport
{
    public List<PersonalData> ListOfPersonalData { get; set; }
    public EmployeeOverallReportBool ColumnsNeeded { get; set; }
    public EmployeeOverallReportFilters ModelFilters { get; set; }
}

我实际上需要ColumnsNeeded模型,它有很多bool属性用于存储每个复选框值(true / false)。

因此,点击后我必须获取当前状态的复选框并发布包含这些模型值的帖子。

我一直在尝试序列化我的表单:

var data = $('#myForm').serialize();
     $.post(url, { presetName: Name, entry: data}, function (data) {
         $("#saveResult").html("Saglabats");
     });

我收到了JSON字符串,但它无效,我无法将其反序列化。

以下是我现在要做的事情:

    $("#savePresetButton").on('click', function () {
         var url = "/Reports/SavePreset";
         var data = @Html.Raw(Json.Encode(Model));
         $.post(url, { presetName: Name, entry: data}, function (data) {
             $("#saveResult").html("Saglabats");
         });
     });

此代码使用我的viewModel及其属性,其中所有ColumnsNeeded属性都设置为false,因为默认情况下,视图中的所有用户端更改都未设置为模型,因此我的表单未提交,价值没有改变。

如何在用户端获取所有复选框的当前状态? 不这样做:

 var dataset = {
            CategoryBool: $("#ColumnsNeeded_CategoryBool").val(),
            NameBool: $("#ColumnsNeeded_NameBool").val(),
            KnowledgeLevelBool: $("#ColumnsNeeded_KnowledgeLevelBool").val(),
            SkillAdditionalInfoBool: $("#ColumnsNeeded_SkillAdditionalInfoBool").val(),
            ...
           }

因为那里有超过90个属性..

我很抱歉这篇文章,但由于模型中的属性数量,发布一些代码是不可能的。

1 个答案:

答案 0 :(得分:1)

您可以serialize整个表单和ajax提交表单吗?

请参阅:Pass entire form as data in jQuery Ajax function