代码之家  ›  专栏  ›  技术社区  ›  Damien

通过jQuery向MVC控制器发送多个项目。ajax

  •  6
  • Damien  · 技术社区  · 17 年前

    jQuery:

    function PostForm() {
        $.ajax({
            url: "/Home/TestMVC",
            type: "POST",
            dataType: "application/JSON",
            data:  $('#form').serialize(),
            complete: callFunction
            }
        });
    

    行动:

    public void TestMVC(MyObject obj)
    {
    //Obj should now contain the data from the serialised form
    }
    

    Name: "Bob"
    Age: "999"
    Sex: "Unknown"
    

    有人知道这是怎么回事吗?每次我通过表格,它都碎了

    我想将数据的内容以及一个QueryString发送给控制器,QueryString可以包含任何数量和类型的键/值对。我可以在服务器上提取这些键/值对,因为我无法在方法签名上为它们创建对象。然而,这并没有达到预期的效果。

    jQuery:

    function PostForm() {
    
        $.ajax({
            url: "/Home/TestMVC",
            type: "POST",
            dataType: "application/JSON",
            data: 
            { 
               Obj: $('#form').serialize(),
               TheWeirdQueryString: $('.additionalParams').serialize(),
            }
        });
    };
    

    行动:

    public void TestMVC(MyObject obj, String TheWeirdQueryString)
    {
    //Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine. 
    }
    

    Obj: name=bob&age=999&sex="unknown"
    TheWeirdQueryString: param1=1&param2=2
    

    我认为这是因为我实际上创建了一个JSON对象作为Data,并将属性设置为对象的名称。

    Foo=1&Bar=2 )MVC不能将QueryString映射到对象的成员(或者看起来是这样)。

    是否有任何方法可以像第一种情况一样工作,但也可以向Action上的第二个参数发送额外的数据?我猜这是在jquery对表单进行序列化时,为所有创建的现有属性添加一个额外的属性。

    Name: "Bob"
    Age: "999"
    Sex: "Unknown"
    TheWeirdQueryString: param1=1&param2=2
    
    3 回复  |  直到 17 年前
        1
  •  5
  •   eu-ge-ne    17 年前

    $.ajax方法中的dataType参数是响应类型(您期望从服务器返回的数据类型),而不是请求。请尝试以下操作:

    function PostForm() {
        $.ajax({
            url: "/Home/TestMVC",
            type: "POST",
            dataType: "application/JSON",
            data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
        });
    };
    

    或者:

    function PostForm() {
        $.ajax({
            url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),
            type: "POST",
            dataType: "application/JSON",
            data: $('#form').serialize()
        });
    };
    

    已更新:

    控制器:

    public void TestMVC(MyObject obj, String[] TheWeirdQueryString)
    {
    }
    

    客户:

    函数PostForm(){
    类型:“POST”,
    dataType:“应用程序/JSON”,
    data:$('#form').serialize()+“&”+$('.additionalParams').seriaalize()
    });
    };
    

    但在客户端,您的附加参数必须采用以下格式:

    TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN
    

    因此$('.additionalParams')元素必须具有“id”和/或“name”属性,如:TheWeardQueryString[1]、TheWeardQueryString[2]。..TheWeirdQueryString[N]

    希望这有帮助

        2
  •  0
  •   Elzo Valugi    17 年前

    ...
    data: { 
        x :$('#form').serialize(), 
        y:'something else'
    }
    ...
    
        3
  •  0
  •   eu-ge-ne    17 年前

    如果你想要一个键/值对字典,另一种解决方案是:

    public void TestMVC(MyObject obj, IDictionary<string, object> TheWeirdQueryString)
    {
    }
    

    客户:

    function PostForm() {
        $.ajax({
            url: "/Home/TestMVC",
            type: "POST",
            dataType: "application/JSON",
            data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
        });
    };
    

    $('additionalParams').serialize()格式:

    TheWeirdQueryString[0].Key=param0&TheWeirdQueryString[0].Value=value0&TheWeirdQueryString[1].Key=param1&TheWeirdQueryString[1].Value=value1&...&TheWeirdQueryString[n].Key=paramN&TheWeirdQueryString[n].Value=valueN
    

    已更新:

    你需要这样的东西:

    <input class="additionalParams" type="text" name="TheWeirdQueryString[0].Key" value="param0" />
    <input class="additionalParams"type="text" name="TheWeirdQueryString[0].Value" value="value0" />
    <!-- ... -->
    <input class="additionalParams"type="text" name="TheWeirdQueryString[n].Key" value="paramN" />
    <input class="additionalParams"type="text" name="TheWeirdQueryString[n].Value" value="valueN" />