我需要将a绑定GroupBox到a BindingSource,而a 又绑定到以下对象:
public class CustomerType
{
public int Id {get; set;}
public string Name {get; set;}
public MemberType MemberType {get; set;}
}
public enum MemberType {Adult, Child}
Run Code Online (Sandbox Code Playgroud)
我按照这个答案创建了一个自定义GroupBox.我还设置了数据绑定如下:
groupBoxMemberType.DataBindings.Add("Selected", this.bindingSource, "MemberType");
Run Code Online (Sandbox Code Playgroud)
但是,在加载现有对象时,我得到以下异常:
DataBinding在列表中找不到适合所有绑定的行.
设置数据源时发生异常:
customerType = customerTypeRequest.Load(id);
bindingSource.DataSource = customerType; //raises exception
Run Code Online (Sandbox Code Playgroud)
我错过了什么?是否有替代方法可以将单选按钮绑定到数据源,特别是BindingSource?
我有一个主要片段,里面有一个viewpager.此viewpager有2页(列表片段).当我启动激活时,会显示主片段,并且还会显示第一个分页片段.此分页片段使用db显示数据AsyncTask.
在主要片段中我有:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
onPageSelected(0);
}
@Override
public void onPageSelected(int position) {
Fragment fragment = (Fragment) pagerAdapter.instantiateItem(viewPager, position);
if (fragment instanceof IPagedFragment) {
((IPagedFragment) fragment).onShown(getActivity());
}
}
Run Code Online (Sandbox Code Playgroud)
界面是:
public interface IPagedFragment {
void onShown(FragmentActivity activity);
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是我必须将活动作为参数传递,因为在onShown调用时,活动仍为空.
此外,分页片段使用类似于LoginActivity样本的进度条逻辑.我也得到以下异常:
IllegalStateException:片段PagedFragment1 {4201f758}未附加到android.support.v4.app.Fragment.getResources上的Activity(Fragment.java:620)
那么,一旦分页片段完全可用于UI,开始从db检索数据的正确阶段是什么?
我有这个动作:
public IHttpActionResult SearchFor(int aboItemType, DTO.FilterColumns filter)
{
//Do stuff...
return Ok<DataSet>(ds);
}
Run Code Online (Sandbox Code Playgroud)
我的客户做了:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
var response = client.PostAsJsonAsync(myurl).Result;
if (response.IsSuccessStatusCode)
{
var results = HttpUtility.HtmlDecode(response.Content.ReadAsStringAsync().Result);
}
Run Code Online (Sandbox Code Playgroud)
上述场景非常有效.但是,如果我对Accept行进行注释,则该操作将以json格式返回数据集.
我想强制这一个特定的操作总是在xml中发送结果.这可能吗?也许有一个属性?
我使用各种枚举作为下拉列表的来源.为了提供用户友好的描述,我Description为每个枚举添加了一个属性,然后执行以下操作:
var list = Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.ToDictionary(k => k, v => v.GetAttributeOfType<DescriptionAttribute>().Description)
.ToList();
Run Code Online (Sandbox Code Playgroud)
以上是重复的,因为我必须在很多地方使用它.我试图添加一个扩展方法:
public static T GetAttributeOfType<T>(this Enum enumVal) where T : System.Attribute
{
var type = enumVal.GetType();
var memInfo = type.GetMember(enumVal.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(T), false);
return (attributes.Length > 0) ? (T)attributes[0] : null;
}
public static KeyValuePair<T, string> ToList<T>(this Enum source)
{
return Enum.GetValues(typeof(T))
.Cast<T>()
.ToDictionary(k => k, v => v.GetAttributeOfType<DescriptionAttribute>().Description)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个例外:
无法将lambda表达式转换为类型'System.Collections.Generic.IEqualityComparer',因为它不是委托类型
使用它作为扩展的正确方法是什么(使用上述2种方法)?
我尝试将一个简单的Web应用程序从我的开发机器部署到运行在Windows 7 Professional虚拟机上的IIS.
在这台机器上我做了以下事情:
安装Web Deploy 3.6,确保安装所有功能.
确保Web管理和Web部署代理服务设置为"自动"并且当前正在运行.
在Windows防火墙中启用了端口8172(未安装其他防火墙).规则已经存在但未启用.
暂时关闭Windows防火墙以确保它仍然没有阻止端口.
当我尝试:
netstat -aon | findstr :8172
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果,所以没有什么东西在听这个端口.
作为测试,我在服务器上安装了VS 2012并使用Web Deploy进行发布工作正常.但是,这不是我需要这样做的方式.
还有什么可以尝试确保服务正在侦听端口8172?
我有一个全局添加的自定义消息处理程序,如下所示:
public class CustomerHandler : DelegatingHandler
{
public CustomHandler(HttpConfiguration httpConfiguration)
{
InnerHandler = new HttpControllerDispatcher(httpConfiguration);
}
}
config.MessageHandlers.Add(new CustomHandler(config));
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
“DelegatingHandler”列表无效,因为“CustomHandler”的属性“InnerHandler”不为空。参数名称:处理程序
所以我将代码更改为:
config.MessageHandlers.Add(new CustomHandler(config) { InnerHandler = null });
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
参数空异常
当我将处理程序添加到单独的路由时,它工作正常。
var customHandler = new CustomHandler(config);
config.Routes.MapHttpRoute(
name: "default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" },
handler: customHandler
);
Run Code Online (Sandbox Code Playgroud)
Innerhandler因此,当设置正确或为空时,它总是会抛出异常。
我缺少什么?
编辑
此自定义处理程序用于检查请求中是否存在特定标头,如果找到,则从内存缓存中获取用户详细信息。从处理程序更改为模块会更有意义吗?
我已升级到最新版本的 AutoMapper (9.0),并将静态配置更改为:
public static IMapper RegisterAutoMapper()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<MyModel MyDto>;
//etc...
});
var mapper = config.CreateMapper();
return mapper;
}
Run Code Online (Sandbox Code Playgroud)
使用以前的静态 API,我曾经在 中执行以下操作Global.asax:
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AutoMapping.Map();
}
Run Code Online (Sandbox Code Playgroud)
WebApiConfig.Register 注册路线,也 Autofac
我如何向 Autofac 注册 AutoMapper,因为目前我在这些行上遇到编译器错误:
var myDto = Mapper.Map<MyModel>(model);
Run Code Online (Sandbox Code Playgroud)
和编译器错误:
非静态字段、方法或属性“Mapper.Map(object)”需要对象引用
我有2个DTO课程:
public class AddressDto
{
public string Street { get; set; }
public string City { get; set; }
public string PostCode { get: set: }
}
public class CustomerDto
{
public int Number{ get; set; }
public string Name { get; set; }
public AddressDto Address { get: set: }
public CustomerDto()
{
Address = new AddressDto();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个带有绑定源的表单,它绑定到CustomerDto.我还有一个带有地址字段的自定义控件.此自定义控件具有绑定到AddressDto的绑定源控件的文本框正确绑定到地址属性.
该控件公开以下属性:
[Bindable(BindableSupport.Yes, BindingDirection.TwoWay)]
[Browsable(false)]
public object Address
{
get { return bindingSource.DataSource; }
set { …Run Code Online (Sandbox Code Playgroud) 我已将自定义控件打包到nuget包中并发布.当我将包添加到项目时,控件不会添加到工具箱中.
设置Automatically Populate Toolbox设置为true(工具 - >选项 - > Windows窗体设计器)
自定义控件具有类属性,例如:
[ToolboxItem(true)]
[ToolboxBitmap(typeof(TextBox))]
[DefaultBindingProperty("Text")]
Run Code Online (Sandbox Code Playgroud)
获得在工具箱中控制的唯一方法是通过浏览dll中packages的文件夹并将其添加到工具箱.
但有没有更简洁的方法,在安装(或更新)软件包后,控件会自动添加到工具箱中?
我有一个对象(这个例子保持简单),例如:
public class MyObject
{
public ICollection<OtherObject> OtherObjects { get; set; }
}
public class OtherObject
{
public bool IsValid() { return true; }
}
Run Code Online (Sandbox Code Playgroud)
目前在我的代码中我做:
bool ok = false;
if (myObject.OtherObjects != null && myObject.OtherObjects.Count > 0)
{
var last = myObject.OtherObjects.Last();
ok = last.IsValid();
}
Run Code Online (Sandbox Code Playgroud)
现在,使用C#6.0,可以在一行代码中执行此操作:
bool? ok = myObject.OtherObjects?.Last()?.IsValid();
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,null条件运算符将不起作用,因为上面的返回异常
序列不包含任何元素.
所以在这种情况下,我是否仍然需要使用旧方法来检查空值而不是使用空条件运算符的新方法?
或者,还有更好的方法?
c# ×8
winforms ×3
android ×1
autofac ×1
automapper ×1
c#-6.0 ×1
data-binding ×1
iis ×1
webdeploy ×1
xml ×1