触发了action方法,但传递的参数的值为null

时间:2017-07-19 09:11:25

标签: asp.net asp.net-mvc asp.net-ajax

我使用ASP MVC 5。 我尝试将数据从客户端发送到服务器上的操作方法。

以下是我发送的数据:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JavaScript form validation - checking all numbers</title>
    <style type="text/css">
    li {
        list-style-type: none;
        font-size: 16pt;
    }
    .mail {
        margin: auto;
        padding-top: 10px;
        padding-bottom: 10px;
        width: 400px;
        background : #D8F1F8;
        border: 1px soild silver;
    }
    .mail h2 {
        margin-left: 38px;
    }
    input {
        font-size: 20pt;
    }
    input:focus, textarea:focus{
        background-color: lightyellow;
    }
    input submit {
        font-size: 12pt;
    }
    .rq {
        color: #FF0000;
        font-size: 10pt;
    }
    </style>


</head>
 <body onload='document.form1.text1.focus()'>
    <div class="mail">
        <h2>Form Valiodation</h2>
        <form name="form1" action="#">
            <ul>
                <!-- enter number in following -->
                <li>
                    Enter Number:
                </li>
                <li><input type='text' name='text1'/></li>
                <li class="rq">
                    *Enter numbers only.
                    <p id="error"></p>
                </li>
                <li>&nbsp;</li>
                <!-- ***************** -->
                <!-- enter name in following -->
                <li>
                    Enter Name:
                </li>
                <li id="myList">
                    <input type='text' name='text2'/>
                    <p id="error2"></p>
                </li>
                <li class="rq">
                    *Enter alphabets only.
                </li>
                <!-- ***************** -->
                <li>&nbsp;</li>
                <input type="submit" name="submit" value="Submit" onclick="allVal(event)" />
                <li>&nbsp;</li>

            </ul>
        </form>
    </div>
     <script type="text/javascript">
     function allVal(event) {

        event.preventDefault();
        var numbers = /^[0-9]+$/;
        var letters = /^[A-Za-z]+$/;


        /* matching the number as follows */
        var matchNum = document.form1.text1.value;
        if(matchNum.match(numbers)) {
            document.getElementById("error").innerHTML="success";
            return true;
        } else if(matchNum.match(letters)) {
            document.getElementById("error").innerHTML="only numbers allowed";
            return false;
        } else {
            document.getElementById("error").innerHTML="please enter valid numbers";
            return false;
        }

        /* matching the name as follows */
        var matchName = document.form1.text2.value;
        if(matchName.match(letters)) {
            document.getElementById("error2").innerHTML="success";
            return true;
        } else {
            document.getElementById("error2").innerHTML="error";
            return false;
        }


    }

     </script>
</body>
</html>

这是ajax方法:

  var layer = { 
                layeType:"Vector"
                layerName:"aaaa"
                mapId:5
               }

这是行动方法:

function saveLayer(layer, callback, error) {
    return $.ajax({
        url: '/Mobile/Layer/SaveLayer',
        type: "GET",
        async: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: { layer: layer },
        success: callback,
        error: error
    });

触发了action方法,但该图层的值为null。

知道为什么值为null以及如何修复它?

2 个答案:

答案 0 :(得分:1)

确定,

首先,您尝试通过GET请求发送复杂对象。 GET请求没有正文,它们仅限于通过Url传输数据,因此它需要是一个查询字符串参数。

其次,遵循休息约定,GET是幂等的,因为每个动作都不应该有副作用,反复调用它应该产生相同的结果。

我会将您的方法切换到POST,因为这会更准确地表明您将对服务器造成副作用。

完成后,我会在C#中创建一个与您传入的json结构相匹配的模型,然后您将获得一个值。

public class Layer 
{
    public string LayeType {get;set;}
    public string LayerName {get;set;}
    public int MapId {get;set;}

}

的Javascript

function saveLayer(layer, callback, error) {
return $.ajax({
    url: '/Mobile/Layer/SaveLayer',
    type: "POST",
    async: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: { layer: layer },
    success: callback,
    error: error
});

功能

public JsonResult SaveLayer(Layer layer) 
{         
   return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet);
}

应该排序

答案 1 :(得分:0)

首先 -

将类型从GET转换为POST

第二 -

将参数类型从字符串更改为对象类型,即图层

Layer类中的属性应与您发送的json数据匹配。

public JsonResult SaveLayer(Layer layer) 
{         
  return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet);
}