将用户名从ViewBag传递到knockout viewmodel

时间:2012-09-05 20:12:56

标签: asp.net-mvc-3 razor knockout.js username httpcontext

试图在这里放一些碎片。

第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,以便我可以根据它观察并采取行动?

2 个答案:

答案 0 :(得分:3)

我假设feedbackViewModel被定义为全局变量,因此您可以简单地将一些代码添加到CSHTML文件中以内联填充它:

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

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

答案 1 :(得分:2)

(我宁愿将此作为评论发布而不是回答,但在某种程度上没有选项)

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

这种方法每次都适合我。它不够优雅,可能会向使用html的用户公开信息...

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