1

试图在这里拼凑一些碎片。

第 1部分:我知道我可以通过以下方式获取 MVC 中的当前用户名:

@HttpContext.Current.User.Identity.Name

在我看来。

第 2部分:我在一个单独的 JS 文件中有一些 MVVM 样式的代码,相关部分如下所示:

var FeedbackViewModel = function () {
    var self = this;
    self.username = ko.observable("");
    self.feedbackText = ko.observable("");
    self.userNameCaptured = ko.computed(function () { return self.username().length > 3; }, self);
};

var feedbackViewModel = new FeedbackViewModel();
ko.applyBindings(feedbackViewModel, document.getElementById("feedbackModal"));

问题:如何将当前用户名从 MVC3 传递到 Knockout viewModel,以便我可以观察并根据它采取行动?

4

2 回答 2

3

我假设feedbackViewModel它被定义为一个全局变量,所以你可以简单地在 CSHTML 文件中添加一些代码来内联填充它:

<script type="text/javascript">
feedbackViewmodel.username("@HttpContext.Current.User.Identity.Name");
</script>

另一种选择是将变量作为构造函数元素传递给 ViewModel 函数。

于 2012-09-05T21:47:32.320 回答
2

(我宁愿将此作为评论发布而不是回答,但不知何故在这里没有选择)

我过去也遇到过类似的问题(剃须刀和 javascript 之间的切换)。我发现的最佳答案是创建一个隐藏控件(#hiddenval 或 #username),然后可以由 JQuery 选择器“读取”。

这种方法每次都对我有用。它不优雅,可能会将信息暴露给获取 html 的用户......

如果不明显,@HttpContext.Current.User.Identity.Name 应该作为标记的一部分填充

于 2012-09-05T20:21:00.177 回答