从Javascript更新Razor模型

时间:2013-09-22 16:32:28

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 knockout.js

情况如下:我有一个Razor生成的项目列表(需要保留Razor生成):

@model MG.ViewModels.Profile.ProfileDetailsViewModel
foreach (var interest in Model.Interests)
    {
        <span class="subject-title">@interest.SubjectName</span>
        <a data-bind='click: function(){viewDescription(@Html.Raw(Json.Encode(interest)))}'class="subject-description-button" href="#" title="View Details">details</a> 
    }

用户可以通过点击为viewDescription javascript函数编码模型的“详细信息”链接来更新每个项目的详细信息:

    self.viewDescription = function (data) {
       // pull data into KO observables
       self.selectedInterestDescription(data.Description);
       self.selectedInterestSubject(data.SubjectName);
       self.selectedInterestId(data.InterestId);
       self.triggerModal(true);
    };

在触发的模式中,用户可以向更新描述的端点发送AJAX请求。这很有用,正如我所料。

我正在努力的是 - 当用户完成更新时,剃刀Model仍然具有旧数据。因此,当用户在更新后点击Razor生成的列表中的“详细信息”时,旧的@model数据将被编码。 如何将更新后的数据从javascript推送到@Model

1 个答案:

答案 0 :(得分:7)

  

如何从javascript将更新的数据推送到@Model?

您绝对无法通过javascript修改服务器上的任何内容。您所能做的只是向服务器发出AJAX请求,该请求将刷新的数据返回给客户端。请记住,一旦最初呈现视图,客户端上就不再有@Model的概念了。因此,谈论更新不存在的东西几乎没有任何意义。在您的AJAX请求成功后,只需更新您需要更新的DOM的相应部分。您使用AJAX进行的控制器操作可以返回所有必要的信息。