2015-08-24 25 views
2

我有以下型号更新视图模型与阿贾克斯返回结果

public class PersonViewModel { 
    public Guid Id { get; set; } 
    public string Firstname{ get; set; } 
    public string Lastname { get; set; } 
} 

我的观点看起来是这样的

@model Web.UI.PersonViewModel 
<form class="form-horizontal" id="fuelux-wizard" method="post"> 
    @Html.Bootstrap().TextBoxFor(p => p.Firstname).Placeholder("First name") 
    @Html.Bootstrap().TextBoxFor(p => p.Lastname).Placeholder("Last name") 
    @Html.Bootstrap().Button().Class("btn btn-next").Text(Model.Id == Guid.Empty ? "Lets Start" : "Continue").HtmlAttributes(new { onclick = "CreatePerson();" }).AppendIcon("fa fa-arrow-right") 

</form> 

这里是按钮被点击

function CreateProposal() { 

    // DO Ajax call to create the person 
    $.ajax({ url: "CreatePerson", type: "POST", data: $('form').serialize() }) 
     .done(function() { 

      $('.wizard').wizard('next'); 
     }) 
     .fail(function() { 
      alert("Unable to save."); 
      $("#personModal").modal("hide"); 
     }); 
} 
时被调用的js函数

在我的控制器中我也有一个CreatePerson方法

[HttpPost] 
public JsonResult CreatePerson(PersonViewModel personViewModel) 
{    
    if(personViewModel .Id == Guid.Empty) 
     personViewModel .Id = Guid.NewGuid(); 
    return Json(personViewModel); 
} 

如何更新视图的ViewModel?这个想法是创建一个人,这将为模型分配一个新的Guid。当没有指定Guid时,按钮中的文本会有所不同。

有没有一种方法可以用返回的ajax结果更新viewmodel?

有人能指引我进入正确的方向吗?

+0

似乎没有必要返回整个对象(在视图中已经有'Firstname'和'Lastname'了,只需返回Guid - 'return Json(personViewModel.Id);'然后更新DOM 'done()'callback。但不知道你想更新什么? –

+0

viewmodel.Id需要更新,所以用户界面有一个ID的记录,以便将来对人进行操作 –

+0

还是有更好的隐藏字段它包含ID值?然后使用js来更新DOM和按钮文本? –

回答

1

听起来像是你需要的是这样的:

<form class="form-horizontal" id="fuelux-wizard" method="post"> 
    @Html.HiddenFor(m => m.Id) 
    @Html.Bootstrap().TextBoxFor(p => p.Firstname).Placeholder("First name") 
    @Html.Bootstrap().TextBoxFor(p => p.Lastname).Placeholder("Last name") 
    @Html.Bootstrap().Button().Class("btn btn-next").Text(Model.Id == Guid.Empty ? "Lets Start" : "Continue").HtmlAttributes(new { onclick = "CreatePerson();" }).AppendIcon("fa fa-arrow-right") 

</form> 

.done(function (data) { 
    $('#Id').val(data.Id); 
    $('.wizard').wizard('next'); 
}) 

您需要设置标识在DOM。可以将DOM看作是存储服务器数据的数据存储库。