2013-02-05 17 views
3

在这个剃须刀视图中,我有两个名为previous和next的按钮。当用户按下这些按钮,我需要调用其中存储用户类型的方法:如何在窗体内部使用AJAX调用方法?

@using (Html.BeginForm("Index", "Quiz", FormMethod.Post)) 
{ 
<div style="border-bottom: 2px solid #c8c8c8; overflow: auto; width: 100%"> 
    <h2 class="float-left" style="padding-bottom:5px;">@Model.Quiz.Name</h2> 

    <div class="float-right"> 
     <input name="button" type="submit" value="done" /> 
    </div> 
</div> 

@for(...) { 
... 
} 

<div class="fixednavcontainer"> 
    <div id="questionnav" class="content-wrapper"> 
     <div id="questionnavstatus" class="float-left"> 
      <p> 
       Question <span id="currentPage">@ViewBag.CurrentPage</span> of <span id="totalPages">@ViewBag.TotalPages</span> 
      </p> 
     </div> 

     <div id="navbuttons" class="float-right"> 
      <img id="previous" src="~/Images/previous.png" /> 
      <img id="next" src="~/Images/next.png" /> 
     </div> 

     <div class="clear-fix" /> 
    </div> 
</div> 

像这样的东西应该叫按钮

private void Save(@model model) 
{ 
    ... 
} 

我想阿贾克斯不会刷新的东西该页面或加载另一个页面,只需保存并保持相同的页面。是否有可能这样做,因为jQuery(我猜)调用一个动作方法?

+0

什么值会传递给动作方法?整个模型? –

+0

@DaveA是的,整个模型 –

回答

3

您还可以使用jQuery和作出这样的呼吁:

var myModel = @Html.Raw(Json.Encode(MyModel)); //MVC3 

$.ajax({ 
    type: "POST", 
    url: "/MyController/SomeAction/", 
    data: myModel , 
    cache: false, 
    dataType: "json", 
    success: function (response) { 
     // Do whatever you have to do... 
    } 
}); 

而在你的控制器是这样的:

public class MyController 
{ 
    [HttpPost] 
    public ActionResult SomeAction(MyModel myModel) 
    { 
     // Do whatever and return whatever 
      return true; 
    } 
} 
+0

将是一种将整个模型传递给方法的方法吗?我的意思是,而不是'FormCollection' –

+0

是的,你可以使用jQuery序列化并发送表单。如果输入名称与模型变量名称相同,它将被选为模型。 –

+0

我更新了示例以展示如何传递模型, – c0deNinja

2

你可以

$.ajax({ 
    type: "POST", 
    url: "@Url.Action('yourAddress')", 
    data: parametr, 
    cache: false, 
    dataType: "json", 
    success: function (response) { 
     // Do whatever you have to do... 
    } 
}); 

,并在控制器

public class XController 
{ 
    [HttpPost] 
    public ActionResult yourAddress(YourModel) 
    { 
... 
    } 
}