基本的局部视图渲染

时间:2012-01-25 17:08:59

标签: c# ajax asp.net-mvc-3

在我看来,我有一个我想要动态渲染的表单。此表单包含更大的表单:

<form>
    //......stuff...

    @using (Ajax.BeginForm("FindWorkOrder", new AjaxOptions { 
        UpdateTargetId = "workOrders" }))
    {
        <input type="text" name="workOrder" />
        <input type="submit" value="Find" />
    }

    <div id="workOrders">
        @{ Html.RenderPartial("DisplayWorkOrder"); }
    </div>
</form>

在我的控制器中:

public ActionResult FindWorkOrder() 
{
    // do query, return a model
    return View();
}

我有一个名为DisplayWorkOrder.cshtml的部分视图。

几个问题:

  • 如何使用从FindWorkOrder控制器收到的数据呈现此部分视图?
  • 当我按下ajax表单中的提交按钮时,整个表单都会提交。我怎样才能将其限制在特定区域?

我的预期功能是提交ajax表单(不提交整个表单),并使用我查询的数据填充<div id="workOrders">

感谢。

1 个答案:

答案 0 :(得分:1)

1

要渲染局部视图,您可以执行此操作

@Html.RenderPartial("DisplayWorkOrder")

如果要将模型传递到“部分”视图,可以执行此操作

@Html.RenderPartial("DisplayWorkOrder",Model)

如果要将模型的proprty传递给Partial视图,可以执行此操作

@Html.RenderPartial("DisplayWorkOrder",Model.MyProperty)

确定您有一个绑定到初始(父)视图的模型,您希望从该视图调用局部视图。您应该在Action中返回名为“FindWorkOrder”的模型/视图模型。这样的事情

public ActionResult FindWorkOrder() 
{
   CustomerViewModel objCustVM=CustomerService.GetCustomerViewModel();  // just to get the customer model.
    return View(objCustVM);
}

并在主视图中

@model MyProject.ViewModel.CustomerViewModel    
<h2>This will show the content from Partial View</h2>
@{    @Html.RenderPartial("DisplayWorkOrder",Model)}

2

要避免提交enitire表单,您可以使用要发送的数据从脚本执行jquery ajax调用。我会将(仅一个)表单标记保留在外层,并将提交按钮更改为普通按钮控件。

$("#submitWorkOrder").click(function(){

 //Do validation

  var id=233; //get customer id from wherever you have it
  ajaxUrl="Customer/SaveWorkOrder/"+id+"?workOrderId=$("#workOrder").val();
  $.ajax({
          url: ajaxUrl,  
          success: function(data){
                //do whatever with the result data.
                                 }
         });    
});