发布请求

时间:2017-04-27 20:32:45

标签: asp.net-mvc asp.net-mvc-4 razor

我正在查看视图中的帖子请求,这样我就看不到URL上的参数了,我可以告诉它是将相应的参数传递给控制器​​以获取请求,但是它没有显示相应的视图控制器。

调用视图

            @Ajax.ActionLink("Work1", "NewIndex", "WorkItems",
            new
            {
                eventCommand = "createforrig",
                //eventArgument1 = @item.Id,
                eventArgument2 = @item.Id
            },
            new AjaxOptions
            {
                HttpMethod = "POST"
            })

WorkItems控制器方法

    [HttpPost]
    public ActionResult NewIndex(NewWorkItemViewModel vm)
    {
        vm.IsValid = ModelState.IsValid;
        vm.HandleRequest();

        if (vm.IsValid)
        {
            // NOTE: Must clear the model state in order to bind
            //       the @Html helpers to the new model values
            ModelState.Clear();
        }
        else
        {
            foreach (KeyValuePair<string, string> item in vm.ValidationErrors)
            {
                ModelState.AddModelError(item.Key, item.Value);
            }
        }

        return View(vm);  
    }

在最后一个返回视图(vm)上放置一个断点,确认它正在被调用,但浏览器不会更新以显示workItems视图。

有关未更新浏览器以显示相应视图的原因的建议。

1 个答案:

答案 0 :(得分:0)

您正在制作ajax帖子,如果您要在浏览器中查看网络控制台,则服务器会返回新呈现的视图。添加成功回调。分配回调来处理响应或使用 AjaxOptions中的UpdateTargetId属性

@Ajax.ActionLink("Work1", "NewIndex", "WorkItems",
            new
            {
                eventCommand = "createforrig",
                //eventArgument1 = @item.Id,
                eventArgument2 = @item.Id
            },
            new AjaxOptions
            {
                HttpMethod = "POST",
                OnSuccess = "AjaxSuccess", //handle with callback
                UpdateTargetId = "MyElementID" //update html element
            })

如果您选择在{javascript

中使用OnSuccess
function AjaxSuccess(data){
    //handle response
}
可以找到{p> AjaxOptions属性和用法here

修改 您可以在单击链接时使用javascript提交表单,将表单放在代码中的某个位置并隐藏它。

@using (Html.BeginForm("NewIndex", "WorkItems", FormMethod.Post, 
new { class = "hidden", id = "postForm" } ))
{
   <input type="hidden" name="eventCommand" value="createforrig" />
   <input type="hidden" name="eventArgument2" value="@item.Id" />

   <input type="submit" value="link text" id="submitForm"/>
}

然后将@Ajax.ActionLink...更改为

@Html.ActionLink("Work1", "NewIndex", "WorkItems", new { id = "postLink"})

如果你正在使用jQuery

<script>
$(function(){
  $('#postLink').click(function(e)
  {
    e.preventDefault();
    $('#postForm').submit();
  });
});
</script>

并且不要忘记在css中隐藏表单

.hidden { display:none;}