我正在查看视图中的帖子请求,这样我就看不到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视图。
有关未更新浏览器以显示相应视图的原因的建议。
答案 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;}