我在文本框上放置了一个货币输入掩码.
但是当提交表单时,需要删除前导'$'符号和分隔逗号,以便可以将值绑定为十进制.
下面是我如何设置autoUnmask中所描述这里.
$('[data-mask="currency"]').inputmask({alias:"currency",'autoUnmask':true});
Run Code Online (Sandbox Code Playgroud)
这似乎没有效果.
设置的正确方法是什么autoUnmask?
我有一个将数据导出到 CSV 文件的方法。
public FileContentResult Index(SearchModel search)
{
...
if (search.Action == SearchActionEnum.ExportToTSV)
{
const string fileName = "Result.txt";
const string tab = "\t";
var sb = BuildTextFile(result, tab);
return File(new UTF8Encoding().GetBytes(sb.ToString()), "text/tsv", fileName);
}
if (search.Action == SearchActionEnum.ExportToCSV)
{
const string fileName = "Result.csv";
const string comma = ",";
var sb = BuildTextFile(result, comma);
return File(new UTF8Encoding().GetBytes(sb.ToString()), "text/csv", fileName);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我在 NUnit 中的测试:
[Test]
public void Export_To_CSV()
{
#region Arrange
...
#endregion
#region Act
var result …Run Code Online (Sandbox Code Playgroud) 看起来 RC2 中有重大变化。
我试图使用这部分旧代码来设置 OpenId 连接:
app.UseOpenIdConnectAuthentication(options =>
{
options.ClientId = Configuration.Get("AzureAd:ClientId");
options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant"));
options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri");
options.Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
};
});
Run Code Online (Sandbox Code Playgroud)
但是 lambda 选项设置不可用。
如果我尝试使用新的OpenIdConnectOptions.
var clientId = Configuration.GetSection("AzureAD:ClientId").Value;
var azureADInstance = Configuration.GetSection("AzureAD:AzureADInstance").Value;
var tenant = Configuration.GetSection("AzureAD:Tenant").Value;
var postLogoutRedirectUrl = Configuration.GetSection("AzureAD:PostLogoutRedirectUrl").Value;
var authority = $"{azureADInstance}{tenant}";
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUrl,
});
Run Code Online (Sandbox Code Playgroud)
没有Notifications。有谁知道新设置是什么?
根据 Pinpoint 的回答,这是我更新的代码:
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{ …Run Code Online (Sandbox Code Playgroud) 似乎所有现有的breezejs示例都是将实体模型传递给BreezeController.
但几乎所有我们构建的页面都使用某种形式的视图模型.在我们没有BreezeJs的日子里,我们从存储库中检索数据(域模型)以填充(使用AutoMapper或手动)视图模型,该模型仅包含该视图的必要数据.WebAPI仅将视图模型数据发送到浏览器,我们可以在其中填充客户端视图模型(通常是knockout可观察的).
保存数据时,我们从a收集数据<form>以填充输入视图模型,仅将该数据发送到服务器,其中输入视图模型中的数据映射到域模型.通过调用存储库中SaveChanges()的DbContext实体来保存更新.
现在,BreezeJs是通过创建一个来接管我们所有的存储库代码EFContextProvider.我见过的例子通常会检索域模型数据,然后将其全部传递给客户端.
[HttpGet]
public IQueryable<Item> Items() {
return _contextProvider.Context.Items;
}
Run Code Online (Sandbox Code Playgroud)
构建视图模型是客户端javascript的工作.
当然,我们可以在服务器端构建视图模型:
[HttpGet]
public List<ItemViewModel> Items() {
var items = _contextProvider.Context.Items
.Include("RelatedEntity")
.ToList();
var model = new List<ItemViewModel>();
.... some code to build model from items ....
return model;
}
Run Code Online (Sandbox Code Playgroud)
好处是通过网络传输的数据更少,我们可以在服务器端进行许多操作.但我不知道修改这个是否是一个好习惯BreezeController.但至少,它返回列出所有项目所需的数据.
当我尝试POST数据时,真正的麻烦来了.
在我发现的BreezeJs示例中,他们使用a ko.observableArray()来存储所有域模型数据,比方说vm.items.然后将新记录newItem构建manager.createEntity到域模型中.在验证数据之后item.entityAspect.validateEntity(),将newItem其推入vm.items并manager.saveChanges()调用,它以某种方式SaveChanges()在BreezeController上调用.
[HttpPost] …Run Code Online (Sandbox Code Playgroud) 以下是我对Select用户进入模型的所有操作,然后删除所有null记录:
model.Users = users
.Select(u =>
{
var membershipUser = Membership.GetUser(u.UserName);
return membershipUser != null
? new UserBriefModel
{
Username = u.UserName,
Fullname = u.FullName,
Email = membershipUser.Email,
Roles = u.UserName.GetRoles()
}
: null;
})
.Where(u => u != null)
.ToList();
Run Code Online (Sandbox Code Playgroud)
想知道是否有办法结合使用SELECT和WHERE子句.
我试过了:
model.Users = users
.Select(u =>
{
var membershipUser = Membership.GetUser(u.UserName);
if (membershipUser != null)
return new UserBriefModel
{
Username = u.UserName,
Fullname = u.FullName,
Email = membershipUser.Email,
Roles = …Run Code Online (Sandbox Code Playgroud) 我有一个转换Address为oneline字符串的扩展方法:
public static class AddressExtensions
{
public static string ToOneLine(this Address address)
{
var sb = new StringBuilder();
sb.Append(address.Street);
if (!string.IsNullOrWhiteSpace(address.City)) sb.Append(string.Format("{0}, ",address.City));
if (!string.IsNullOrWhiteSpace(address.State)) sb.Append(string.Format("{0}, ", address.State));
if (!string.IsNullOrWhiteSpace(address.Zip)) sb.Append(string.Format("{0}, ", address.Zip));
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我用它将数据从域模型传输到我的DTO.下面的代码使用foreach和工作正常:
var entity=_repository.GetAll();
var model = new List<SummaryViewModel>();
foreach (var e in entity)
{
model.Add(new SummaryViewModel
{
Address = e.Address.ToOneLine(),
Name = e.Name,
Id = e.Id
});
}
Run Code Online (Sandbox Code Playgroud)
但是在使用时LINQ,
var model = entity.Select(e => new SummaryViewModel
{ …Run Code Online (Sandbox Code Playgroud) 这是我所做的:
可序列化的类:
[Serializable()]
public class Ticket
{
public string CitationNumber { get; set; }
public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后将模型序列化为xml:
var model = cart.Citations
.Select(c => new Ticket(c.Number, c.Amount)).ToList();
var serializer = new XmlSerializer(typeof (List<Ticket>));
var sw = new StringWriter();
serializer.Serialize(sw, model);
return sw.ToString();
Run Code Online (Sandbox Code Playgroud)
输出sw.ToString()就像
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Ticket>
<CitationNumber>00092844</CitationNumber>
<Amount>20</Amount>
</Ticket>
</ArrayOfTicket>
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以自定义Serialize()输出以删除那些模式信息,例如:<?xml version="1.0" encoding="utf-16"?>和xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"?
以及如何将根元素更改ArrayOfTicket为其他内容?
我可以控制这些输出吗?
只是好奇我们是否可以在里面执行文本连接ng-options.
<select
...
ng-options="i.month | dnrMonthName + i.year for i in vmAdd.options.allMonths">
</select>
Run Code Online (Sandbox Code Playgroud)
以便获得一个下拉列表,其中包含以下值:
2015年5月
可能吗?那怎么写ng-options呢?
在<select>输入中,我们可以添加一个禁用选项作为占位符:
<select>
<option value="" disabled selected>Select your option</option>
<option value="1">January</option>
...
</select>
Run Code Online (Sandbox Code Playgroud)
但是我们如何在<select>由AngularJS构建的禁用选项中添加,ng-options从控制器提供?
<select class="month" id="month"
ng-model="vm.month"
ng-options="m for m in vm.months">
</select>
Run Code Online (Sandbox Code Playgroud) 我需要通过Id在报告可观察数组中找到报告.我怎么写这个underscore陈述?
我在用:
_.where(reports(), {id:data.ReportId})
Run Code Online (Sandbox Code Playgroud)
和
_.where(reports(), {id:ko.observable(data.ReportId)})
Run Code Online (Sandbox Code Playgroud)
它总是返回一个空数组.
然后我发现了一些underscoreKO.js,但它仍然无法奏效.有人能帮我吗?谢谢.
还有另外一个类似的帖子在这里,但他们不完全一样.ko.utils.arrayFirst可以找到该项目,但不会帮助我更新它.
正确答案来自Daniel A. White,稍有改动.谢谢.
一个修正:
var record = _.filter(reports(), function (item) { return item.id() == data.ReportId; })
if (record.length > 0) {
_.first(record).reportStatus("Approved");
}
Run Code Online (Sandbox Code Playgroud)
我发现它必须item.id()不仅仅是id().但感谢丹尼尔一百万!
试图模仿这篇文章:创建将T限制为枚举的通用方法
public static string[] ToTextArray(this Dictionary<string, T> dictionary) where T:struct, IConvertible
{
...
}
Run Code Online (Sandbox Code Playgroud)
看来我T无法解决.为所有Dictionary<string, enum_type>类编写扩展方法的正确方法是什么?
c# ×5
angularjs ×2
knockout.js ×2
linq ×2
asp.net-core ×1
asp.net-mvc ×1
breeze ×1
enums ×1
foreach ×1
generics ×1
jquery ×1
nunit ×1
unit-testing ×1
xml ×1