jquery ajax GET从razor视图模型传递属性

时间:2016-12-29 09:59:28

标签: jquery ajax asp.net-mvc razor

在视图中的编辑器中,我输入name和0作为socialsecuritynumber,但调用控制器中的错误方法,只有名称作为参数且值为“0”的那个,这将说出socialsecuritynumber编辑器的值。我做错了什么?

编辑:当我检查chrome开发人员工具中调用的url时,它说:localhost:51446 / Person // 0

PersonViewModel

public string Name { get; set; }
public int SocialSecurityNumber { get; set; }

PersonController

[HttpGet]
[Route("Person")]
public ActionResult Index()
{
   return View();
}

[HttpGet]
[Route("Person/{name}")]
public JsonResult GetProduct(string name)
{
   var person = new PersonViewModel { Name = id, SocialSecurityNumber = 12345678 };
   return Json(person, JsonRequestBehavior.AllowGet);
}

[HttpGet]
[Route("Person/{name}/{socialSecurityNumber}")]
public JsonResult GetProduct(string name, int socialSecurityNumber)
{
   var person = new PersonViewModel { Name = name, SocialSecurityNumber = 12345678 };
   return Json(person, JsonRequestBehavior.AllowGet);
}

Razor View

@model Test.PersonViewModel


<div class="row highlight col-md-10 col-md-offset-2" id="SearchPerson">
   <div class="col-md-1">@Html.LabelFor(model => model.Name):</div>
   <div class="col-md-2">@Html.EditorFor(model => model.Name, new { htmlAttributes = new { placeholder = "Enter name" } })</div>
   <div class="col-md-1">@Html.LabelFor(model => model.SocialSecurityNumber):</div>
   <div class="col-md-2">@Html.EditorFor(model => model.SocialSecurityNumber, new { htmlAttributes = new { placeholder = "Enter ssn" } })</div>
   <button type="button" class="btn btn-default" id="btnSearchPerson" </button>
</div>

<script type="text/javascript">

   $(function() {
      $('#btnSearchPerson').on('click', function () {
         var $this = $(this);
         $this.button('loading');

         $.ajax({
            type: 'GET',
            dataType: 'json',
            url: 'Person/' + '@Model.Name' + '/' + @Model.SocialSecurityNumber,
            success: function (data) {
                $('#SearchPerson').html(data);
            },
            error: function (xhr, ajaxOption, thorwnError) {
                console.log("Error")
            },
         });
    });
</script>

1 个答案:

答案 0 :(得分:2)

这里的问题是你在razor服务器端变量的ajax url中设置参数,所以在修改文本框中的值之后,它们将在javascript调用中得到更新,因为razor变量将在查看渲染时间,因此您需要在通过jquery发送ajax调用之前读取值。

您需要更改以下内容:

url: 'Person/' + '@Model.Name' + '/' + @Model.SocialSecurityNumber,

为:

url: 'Person/' + $("#Name").val() + '/' + $("#SocialSecurityNumber").val(),

0被发布了,因为int的默认值为0,所以它已经发布了但是对于字符串,没有在网址中发布任何内容。

相关问题