我在设置下拉列表的初始值时遇到了一个小问题.下面的代码是视图模型定义和初始化$(document).ready.我有一个名为sourceMaterialTypesa 的数组,selectedSourceMaterialType表示该数组的选定值.我正在使用(ASP.Net MVC)Model和ViewBag中的值初始化视图模型.
var viewModel = {
sourceMaterialTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.SourceMaterialTypes))),
selectedSourceMaterialType :
ko.observable(@Html.Raw(Json.Encode(Model.SourceMaterialType))),
ingredientTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.IngredientTypes))),
selectedIngredientType : ko.observable()
};
$(document).ready(function () {
ko.applyBindings(viewModel);
viewModel.selectedSourceMaterialType.subscribe(function(newSourceMaterialType) {
$.getJSON("/IngredientType/FindByMaterialType",
{ "id": newSourceMaterialType })
.success(function (data) {
viewModel.ingredientTypes($.parseJSON(data));
})
.error(function () { alert("error"); });
});
});
Run Code Online (Sandbox Code Playgroud)
以下是具有Knockout绑定定义的下拉列表(select)列表的定义.
<select id="SourceMaterialTypeId"
name="SourceMaterialTypeId"
data-bind="options: sourceMaterialTypes,
optionsText: 'Name',
optionsValue : 'Id',
value: selectedSourceMaterialType"></select>
Run Code Online (Sandbox Code Playgroud)
这一切都正常,除了源材料下拉列表中最初选择的值(selectedSourceMaterialType正确绑定所以当下拉选择更改其值正确更新时,它只是我遇到问题的初始选择),这始终是第一个sourceMaterialTypes我视图模型中数组中的项.
我希望最初选择的值是从(服务器端)模型初始化的值作为selectedSourceMaterialType视图模型属性的值.
我从视图模型类更新列表框有问题.我使用Caliburn Micro框架.我的情况在这里:
我在listbox上绑定了bindableCollection类型的属性:
视图模型中的代码:
private BindableCollection<UserInfo> _friends;
public BindableCollection<UserInfo> Friends
{
get { return _friends; }
set
{
_friends= value;
NotifyOfPropertyChange(()=>Friends);
}
}
Run Code Online (Sandbox Code Playgroud)
在视图模型中,我创建假的服务方法,将新的新数据作为List返回,并使用此数据更新属性Friends,它们在listbox上绑定.
我每隔3秒就在调度员计时器滴答事件中调用假服务方法.
private static UserInfo FakeUser()
{
var user = new UserInfo
{
Age = "16",
Emphasis = true,
IdUser = "11542",
IsBlocked = false,
IsFriend = true,
LocationInfo = new Location
{
CityName = "TN",
IdCity = 123456,
IdRegion = 1246,
RegionName = "TN",
},
StatusInfo = new Status
{
IdChat = 12,
IsLogged = true, …Run Code Online (Sandbox Code Playgroud) 我在创建一个BitmapImage来自MemoryStreamweb请求的png和gif字节时遇到了一些麻烦.这些字节似乎可以很好地下载,并且BitmapImage创建的对象没有问题,但是图像实际上并没有在我的UI上呈现.仅当下载的图像是png或gif类型时才会出现此问题(适用于jpeg).
以下是演示此问题的代码:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
var byteStream = new System.IO.MemoryStream(buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.StreamSource = byteStream;
bi.EndInit();
byteStream.Close();
stream.Close();
return bi;
}
Run Code Online (Sandbox Code Playgroud)
为了测试Web请求是否正确获取字节,我尝试了以下操作,将字节保存到磁盘上的文件,然后使用a UriSource而不是a 加载图像StreamSource,它适用于所有图像类型:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
string fName = "c:\\" + …Run Code Online (Sandbox Code Playgroud) 我刚开始使用Caliburn Micro.我想要一个带有字符串列表的组合框,当用户选择一个项目时,我希望有一个名为的notify方法.应该很简单吧?我很不耐烦,5分钟的谷歌搜索还没有解决它,所以Stackers要救!
注意:我赞成一个答案,告诉我如何将它放入视图模型中.避免复杂的XAML是MVVM框架的全部要点,恕我直言.
我希望获得与Windows Media Player或基于浏览器的Flash播放器相同的效果,这些播放器在最大化时占用整个(甚至任务栏都不可见)的房地产.
如果这工作得很好WindowState被设置为Maximized与WindowStyle被设定为None这样的应用程序处于该状态开始XAML.问题是我想在一个有边框的窗口中启动应用程序,当用户选择时,如上所述最大化.在StateChanged处理程序中我检查Maximized状态,如果是这种情况我设置WindowStyle为None.这具有最大化窗口但不覆盖任务栏的效果.下面的代码将使我的工作正常,但它是一个黑客,我想清理它:
if (WindowState == WindowState.Maximized)
{
m_videoWindow.Maximize();
WindowStyle = WindowStyle.None;
//the following makes this work but I would like to clean it up
Hide();
Show();
}
Run Code Online (Sandbox Code Playgroud)
编辑 这个(从2006年仍然在CTP中)提到了这个问题,来自MS的某些人希望在下一个版本中改进全屏支持,是否已经进行了这些改进?
正如问题标题所解释的那样,在DateTime通过Html.TextboxFor方法显示属性值时,指定我的视图使用的格式的最佳方法是什么.
默认显示包括我真正只想显示日期的日期和时间.
谢谢
这是一个奇怪的,在这一点上,我认为它可能与我的机器配置有关.
基本上我已经创建了一个非常标准的实现,INotifyDataErrorInfo在某些情况下,当ErrorsChanged我提出一个事件时ArgumentOutOfRangeException.此异常不包含太多信息; 它给了我ArgumentOutOfRangeException crossed a native/managed boundary加上ArgumentOutOfRangeException关于非负索引和集合大小的标准描述.该InnerException为空.堆栈跟踪如下:
at System.ThrowHelper
.ThrowArgumentOutOfRangeException(ExceptionArgument argument,
ExceptionResource resource)
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at System.Collections.ObjectModel.Collection`1.get_Item(Int32 index)
at System.Collections.ObjectModel.ReadOnlyCollection`1.get_Item(Int32 index)
Run Code Online (Sandbox Code Playgroud)
我提到我的机器配置的原因是因为我尝试了一些发布到博客的解决方案(例如这里和这里)并得到相同的问题(即不是我的代码,INotifyDataErrorInfo的另一个实现)并且在评论中没有提及任何其他人我遇到的问题.谷歌搜索出现了几个随机点击,没有帮助.
所需的州如下:
更新:如果我将焦点从显示验证错误的TextBox移开,我也可以重现.
我有点想知道我是否错过了服务包/更新或者某些东西,因为从我看到它看起来好像框架代码中的一个非常基本的错误,同时它没有发生在其他人身上.
更新:我正在使用Silverlight 4的最终RTM版本.不是RC或Beta.
更新:我得到与本白皮书提供的官方MS样本相同的结果.
更新:我现在已经在另一台机器上测试了我的代码和提到的样本,它运行正常.我仍然真的想解决这个问题,因为它有点令人不安,因为它不适用于我的常规机器(直到现在我都没有遇到任何麻烦).关于如何追踪导致这种情况的任何建议将不胜感激.我已经在问题机器上重新安装了Silverlight(Runtime,SDK,Toolkit),但这还没有解决问题.
更新:这是框架代码的调用堆栈,其中通过启用MS服务器的源服务器支持获得异常:
mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument argument, System.ExceptionResource resource) + 0x40 bytes
mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException() + 0x10 bytes
mscorlib.dll!System.Collections.Generic.List<System.Windows.Controls.ValidationError>.this[int].get(int index = 0) + 0x13 bytes
mscorlib.dll!System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError>.this[int].get(int index) + 0x2e …Run Code Online (Sandbox Code Playgroud) 我有一组服务合同,将我的服务接口分成相关功能块.我目前正在使用单个服务类实现所有合同(可能希望稍后拆分它们,但现在单个服务类就足够了).
我试图使用配置文件配置端点(而不是通过代码).问题是我得到了一个,ServiceActivationException因为两个端点(每个服务合同一个)正在尝试监听同一个uri.异常细节说,要实现这一点,两个端点必须共享绑定对象,这是有道理但我无法弄清楚如何通过配置这样做(我没有尝试通过代码,因为我在IIS托管,但但我可以想象这是一个在代码中配置的简单练习.
以下是我目前正在使用的配置(这仍然是开发人员,因此我目前不担心其中一些设置可能会暴露的安全问题等):
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="CDC.WebPortal.MidTier.MidTierAccessService"
behaviorConfiguration="MidTierServiceBehaviour" >
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="RestBindingConfiguration"
contract="****************************.IProductService" />
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="RestBindingConfiguration"
contract="****************************.ICategoryService" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="RestBindingConfiguration"
maxReceivedMessageSize="104857600">
<readerQuotas maxStringContentLength="104857600"/>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MidTierServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何在两个端点之间共享这种绑定?
在这个SO问题中的评论表明我可能无法做到这一点,但我不相信这是正确的.
更新1根据这篇MS出版物,我正在做的应该没问题......
UPDATE2如果有帮助,这是svc文件内容:
<%@ ServiceHost Language="VB" Debug="true"
Service="*********************.MidTierAccessService"
Factory="Microsoft.ServiceModel.Web.WebServiceHost2Factory" %>
Run Code Online (Sandbox Code Playgroud)
更新3这是例外细节:
绑定实例已与侦听URI"********************"相关联.如果两个端点想要共享相同的ListenUri,则它们还必须共享相同的绑定对象实例.两个冲突的端点要么在AddServiceEndpoint()调用中,在配置文件中指定,要么在AddServiceEndpoint()和config的组合中指定.
更新4好的我以前错过了这个,说明"在为特定的.svc服务公开多个端点时,您将需要使用相对地址".造成这种情况的原因与IIS虚拟目录确定服务的基地址有关,任何人都可以更详细地解释这一点,即为什么IIS需要为每个合同进行相对寻址.
我正在寻找从一些服务器数据(ViewBag)初始化一个淘汰可观察数组的最佳方法,我希望数组内容是我定义的javascript类型.没有JS类型的要求我可以使用:
materialVarieties: ko.observableArray(@Html.Raw(Json.Encode(ViewBag.Materials)))
Run Code Online (Sandbox Code Playgroud)
但我也有一个我想要使用的材料JS类型,所以我可以有一些额外的ViewModel特定的属性和功能,即:
var material = function(id, name) {
this.id = id;
this.name = name;
this.selected = ko.observable(false);
this.select = function()
{
jQuery.each(processViewModel.materials(), function(index, item)
{
item.selected(false);
});
this.selected(true);
}
}
Run Code Online (Sandbox Code Playgroud)
然后所需的初始化变为:
materialVarieties: ko.observableArray([new material(1, "Apricot"), .....
Run Code Online (Sandbox Code Playgroud)
目前我从ViewBag数据构建一个字符串,然后将其渲染为初始化器,如下所示:
@{ var items = string.Join(",",
((IEnumerable<MaterialVariety>) ViewBag.Materials)
.Select(m => string.Format("new material({0}, {1})",
Json.Encode(m.Id), Json.Encode(m.Name)))); }
var processViewModel = {
material: ko.observableArray([@Html.Raw(items)])
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有比这更清洁的方式string.Join.我可以把它包装在一个助手里.你是做什么?
我正在 QuillJS 中创建一些自定义印迹。它们大多有效,但是我在复制和粘贴印迹时遇到问题,并认为这是由于未提供index(node: Node, offset: number): number或position(index: number, inclusive: boolean): [Node, number]实现。
印迹是 类型的blots/embed。他们生成的标记看起来像(我添加了一个sampleandspellcheck属性,并生成包含一个图标和一些文本的内容):
<sfx sample="A Sample" spellcheck="false">

<span contenteditable="false"><i class="btr bt-volume-up"></i>A Sample</span>

</sfx>
如果我尝试自己选择印迹然后复制和粘贴,我只会粘贴 sfx 标签的内容,而不是新的嵌入实例......(顶部嵌入是预期的格式,底部是它的样子粘贴时。蓝色边框显示选择)。
如果我选择印迹并在选择中包含其他任何内容,例如左侧的空格,则复制/粘贴按预期工作。
我确实想要默认选择行为,即嵌入选择作为一个整体并且表现得像它的长度为 1。
我无法确定要做什么index以及position(假设这是原因?)来完成这项工作。任何人都可以通过描述我需要做什么并解释这些回调的行为方式来提供帮助(羊皮纸文档中的描述有点薄)。做类似事情的参考实现就足够了,我已经查看了 quill 内置的嵌入,但它们似乎没有帮助。
asp.net-mvc ×3
javascript ×3
wpf ×3
bitmapimage ×2
knockout.js ×2
silverlight ×2
conventions ×1
dispatcher ×1
formatting ×1
html-helper ×1
iis ×1
iis-7 ×1
image ×1
layout ×1
memorystream ×1
quill ×1
resize ×1
validation ×1
wcf ×1
wcf-binding ×1
webrequest ×1