【问题标题】:Updating a Razor Model from Javascript从 Javascript 更新 Razor 模型
【发布时间】:2013-09-27 13:44:47
【问题描述】:

情况如下:我有一个 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢达林,这很有道理
    • 在您的 AJAX 调用的成功回调中,您可以执行以下操作:$('a.subject-description-button').attr('data-bind', 'PUT THE NEW VALUE HERE')
    • 啊!我只是发现所以我删除了我的评论,你的方式比我要做的更好。感谢您的帮助。
    • 只是在 Darin 的回答中添加一些内容。使用 KO 时,您甚至不应该使用带有 Razor 视图的模型。仍然需要服务器端 MVC 模型来向后端实体添加与 Web 相关的内容。但是将这些模型绑定到剃刀视图并没有任何好处。而是公开一个为您提供所有数据的 Web api 函数。从您的 KO 视图模型中调用这些以填充它们
    猜你喜欢
    • 2019-10-06
    • 2013-04-16
    • 2013-12-04
    • 2020-05-19
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2021-07-23
    • 2021-10-13
    相关资源
    最近更新 更多