小编Gio*_*zas的帖子

自定义验证属性中的客户端验证 - asp.net mvc 4

我在互联网上关注了一些文章和教程,以便创建一个自定义验证属性,该属性也支持asp.net mvc 4网站中的客户端验证.这就是我现在所拥有的:

RequiredIfAttribute.cs

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] //Added
public class RequiredIfAttribute : ValidationAttribute, IClientValidatable
{
    private readonly string condition;
    private string propertyName; //Added

    public RequiredIfAttribute(string condition)
    {
        this.condition = condition;
        this.propertyName = propertyName; //Added
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        PropertyInfo propertyInfo = validationContext.ObjectType.GetProperty(this.propertyName); //Added
        Delegate conditionFunction = CreateExpression(validationContext.ObjectType, _condition);
        bool conditionMet = (bool)conditionFunction.DynamicInvoke(validationContext.ObjectInstance);

        if (conditionMet)
        {
            if (value == null)
            {
                return new ValidationResult(FormatErrorMessage(null));
            }
        }

        return ValidationResult.Success;
    }

    private Delegate CreateExpression(Type objectType, string expression) …
Run Code Online (Sandbox Code Playgroud)

c# jquery jquery-validate unobtrusive-validation asp.net-mvc-4

29
推荐指数
1
解决办法
7万
查看次数

在LINQ查询的select部分内调用一个方法

我有以下linq查询:

var file = (from p in database.tblFile
            join o in database.tblFileVersion on p.fldFileID equals o.fldFileID
            join t in database.tblFileAttachments on p.fldFileID equals t.fldFileID
            where p.fldFileID == team.Key
            where o.fldVersionNo == highestVersion
            select new UserDashboardFile
            {
                Filename = p.fldFilename,
                VersionNumber = o.fldVersionNo,
                FileID = team.Key,
                Type = GetFileType(t.fldTableName),
            }).Single();
Run Code Online (Sandbox Code Playgroud)

GetFileType是一种返回枚举类型的方法.没有语法错误,但是当我运行项目(它是一个mvc 4 Web项目)时,我收到以下错误:

LINQ to Entities无法识别方法'DCIS.Code.UserDashboardFileType GetFileType(System.String)'方法,并且此方法无法转换为商店表达式.

我想这个查询不能被翻译成t-sql查询,但我不知道如何更改我的查询以避免上述错误.提前致谢...

c# linq-to-entities entity-framework

9
推荐指数
1
解决办法
6703
查看次数

Web API - 上传到Azure存储时取得进展

我想要完成的任务是创建一个Web API服务,以便将文件上传到Azure存储.同时,我希望有一个反映实际上传进度的进度指示器.经过一些研究和研究,我发现了两件重要的事情:

首先,我必须手动将文件拆分为块,并使用Microsoft.WindowsAzure.Storage.dll中PutBlockAsync方法异步上载它们.

其次,我必须在流媒体模式下的Web API服务中接收文件,而不是在缓冲模式下.

所以到现在为止我有以下实现:

UploadController.cs

using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using WebApiFileUploadToAzureStorage.Infrastructure;
using WebApiFileUploadToAzureStorage.Models;

namespace WebApiFileUploadToAzureStorage.Controllers
{
    public class UploadController : ApiController
    {
        [HttpPost]
        public async Task<HttpResponseMessage> UploadFile()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                return Request.CreateResponse(HttpStatusCode.UnsupportedMediaType,
                    new UploadStatus(null, false, "No form data found on request.", string.Empty, string.Empty));
            }

            var streamProvider = new MultipartAzureBlobStorageProvider(GetAzureStorageContainer());
            var result = await Request.Content.ReadAsMultipartAsync(streamProvider);

            if (result.FileData.Count < 1)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest,
                    new UploadStatus(null, …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-storage-blobs asp.net-web-api2

9
推荐指数
1
解决办法
1814
查看次数

MVC模型绑定不适用于Kendo Grid

在MVC项目中,我有以下视图,其中我使用了Kendo Grid

<%: Html.Kendo().Grid<Milestone>()
                .Name("MilestonesGrid")
                .Columns(columns =>
                {
                    columns.Bound(p => p.ContractMilestoneID).Hidden();
                    columns.Bound(p => p.MilestoneSN).Title("??????? ????????");
                    columns.Bound(p => p.EstimatedDate).Title("?????????? ??????????");
                    columns.Bound(p => p.RealDate).Title("?????????? ??????????");
                    columns.Bound(p => p.MilestoneDescription).Title("?????????");
                    columns.Bound(p => p.Payment).Title("???????");
                    columns.Bound(p => p.PaymentRate).Title("??????? ????????");
                    columns.Bound(p => p.IsCompleted).Title("???? ???????????");
                    columns.Command(command =>
                        {
                            command.Edit()
                                   .Text("???????????")
                                   .CancelText("???????")
                                   .UpdateText("??????????");

                            command.Destroy()
                                   .Text("????????");
                        });
                })
                .ToolBar(toolbar => toolbar.Create().Text("???????? ???? ????????"))
                .Editable(editable => editable.Mode(GridEditMode.InLine))
                .Sortable()
                .Pageable()
                .Filterable()
                .Resizable(resize => resize.Columns(true))
                .DataSource(dataSource => dataSource
                    .Ajax()
                    .ServerOperation(true)
                    .Model(model => model.Id(o => o.ContractMilestoneID))
                    .Model(model => model.Field(o => o.MilestoneSN))
                    .Model(model => model.Field(o …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc kendo-ui

8
推荐指数
1
解决办法
9081
查看次数

C#Convert.ToDouble()在将字符串转换为double时丢失小数点

假设我们有以下简单代码

        string number = "93389.429999999993";
        double numberAsDouble = Convert.ToDouble(number);
        Console.WriteLine(numberAsDouble);
Run Code Online (Sandbox Code Playgroud)

之后,转换numberAsDouble变量的值为93389.43.我该怎么做才能使这个变量保持完整的数字而不是四舍五入呢?我发现它的Convert.ToDecimal行为方式不同,但我需要将值设为double.

-------------------小更新---------------------

在上面代码的第2行中放置一个断点,表明numberAsDouble变量在控制台中显示之前具有舍入值93389.43.

c# double

8
推荐指数
2
解决办法
1万
查看次数

在ASP.NET MVC项目和Web API项目之间共享cookie

我有一个有2个项目的解决方案.一个是ASP.NET MVC Web应用程序,另一个是Web API项目.我想要做的是在两个应用程序之间共享cookie.在服务器上部署时,第一个应用程序托管在mydomain.com上,另一个应用程序托管在api.mydomain.com(子域)上.我也使用https.我在MVC项目中使用ASP.NET Identity作为身份验证系统.在互联网上阅读了大量文章后,我做了以下工作:

1)在web.config文件中,在两个项目中都包含以下机器密钥标记.

<machineKey validationKey="3DF5D185FFB897592E14ED51A6DDC3E2729827A2F2180151A1BC39BE5C035D15F23700C928EFDBACEAEE498D05B76C65537FDEFB673039BCD961045C3BA8ACD3" 
            decryptionKey="CE274BA1DB61C086A80F5D8BD1AC5AC92A8BA19F37E04FC7" validation="SHA1" />
Run Code Online (Sandbox Code Playgroud)

2)在MVC项目中,我以下列方式配置了ASP.NET Identity Cookie:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
      LoginPath = new PathString("/Home/index"),
      Provider = new CookieAuthenticationProvider
      {  
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(TimeSpan.FromMinutes(30), (manager, user) => user.GenerateUserIdentityAsync(manager))
      },
      SlidingExpiration = true,
      ExpireTimeSpan = TimeSpan.FromMinutes(45),
      CookieName = "MyCookie",
      CookieDomain = ".mydomain.com"
 });
Run Code Online (Sandbox Code Playgroud)

3)在Web API项目中,我启用并配置了CORS,我在web.config中添加了以下配置(CORS在生产环境中正常工作):

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Credentials" value="true"></add>
    <add name="Access-Control-Allow-Origin" value="mydomain.com" />
    <add name="Access-Control-Allow-Headers" value="content-type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
</httpProtocol> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc authorization asp.net-web-api

7
推荐指数
1
解决办法
1616
查看次数

EF Core 2.1 RC 1 GroupBy仍然在本地进行评估

我按照ASP.NET博客的官方指南将ASP.NET Core项目从2.0.x升级到2.1.0-rc1.该EF核心软件包进行了更新,以相同的版本,以及.我使用的数据库提供程序是Microsoft.EntityFrameworkCore.SqlServer.我正在等待这次升级,因为我需要很多LINQ GroupBy翻译功能.我的一个疑问如下:

await _db.Documents
         .ApplyFilter(options)
         .Where(x => x.SubscriptionId == subscriptionId && x.Status != DocumentStatus.Deleted)
         .GroupBy(document => new { document.SubscriptionId })
         .Select(group => new {
            Total = group.Sum(x => x.Total),
            TotalDiscount = group.Sum(x => x.TotalDiscount),
            TotalNet = group.Sum(x => x.TotalNet != null ? x.TotalNet.Value * (decimal)x.CurrencyRate : 0),
            SubTotal = group.Sum(x => x.SubTotal != null ? x.SubTotal.Value * (decimal)x.CurrencyRate : 0),
            TotalSalesTax = group.Sum(x => x.TotalSalesTax != null …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core .net-core

6
推荐指数
1
解决办法
1305
查看次数

始终显示在Kendo网格中选择的第一行

我正在开发一个使用Kendo Grid的mvc4项目.我希望用户看到默认选中的网格的第一行.我有很多行所以我使用分页.当用户转到第2,3页,... 40等我还想看到每个页面的第一行被选中.下面是我创建网格的代码

<%: Html.Kendo().Grid(Model)
            .Name("AuthorisationsGrid")
            .Columns(columns =>
             {
                 columns.Bound(p => p.Mis).Title("MIS").Width(80);
                 columns.Bound(p => p.AuthorisationSerialNumber).Title("?? ???????????");
             })
             .Pageable()
             .Sortable()
             .Filterable()
             .Selectable(s => s.Mode(GridSelectionMode.Single))
             .Resizable(resize => resize.Columns(true))
             .DataSource(dataSource => dataSource
                .Ajax()
                .ServerOperation(false)
                .Model(model => model.Id(p => p.AuthorisationSerialNumber))
                .Model(model => model.Field(p => p.Mis))
                .Batch(true)
                .Read(read => read.Action("AuthorisationsPartial", "UserFilesDashboard")))%>
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现上述行为?也许jQuery可能有用(但我对jQuery知之甚少).任何帮助赞赏.先感谢您.

asp.net-mvc-4 kendo-ui

5
推荐指数
1
解决办法
2万
查看次数

从文件系统中查看图像

我有一个ASP.NET MVC 4 Web应用程序,它位于服务器上的C:\ inetpub\wwwroot\appName目录中.我想将用户上传的图像存储在D:\ appName\UserFolder \目录中,然后在剃刀视图中显示这些图像.我创建了以下html帮助器:

public static class MyHtmlHelpers
{
    public static IHtmlString UploadedImage(this HtmlHelper htmlHelper, string url)
    {
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        var image = new TagBuilder("img");
        image.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext);
        return MvcHtmlString.Create(image.ToString(TagRenderMode.SelfClosing));
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用上面这样的帮助:

@Html.UploadedImage(item.StoreItemImage)
Run Code Online (Sandbox Code Playgroud)

这个item.StoreItemImage从数据库中带来了图像的绝对路径(比方说D:\ appName\UserFolder\image.jpg).这个助手终于呈现出来了

<img src="D:\appName\UserFolder\image.jpg" />
Run Code Online (Sandbox Code Playgroud)

图像不会显示在浏览器中.此外,它不是一种优雅而安全的方式来显示应用程序存储图像的实际服务器路径.有解决方案吗?谢谢.

因此,根据Cory的建议,我只是根据记录发布了适合我的解决方案.我可能会对其他人有所帮助,我创建了以下操作方法:

public FileResult GetImage(string fileLocation)
    {
        Image image = Image.FromFile(fileLocation);
        byte[] imageArray;

        using (var memoryStream = new MemoryStream())
        {
            image.Save(memoryStream, ImageFormat.Jpeg);
            imageArray = memoryStream.ToArray();
        }

        return File(imageArray, "image/jpeg");
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4

4
推荐指数
1
解决办法
5166
查看次数

使用moment.js时间不能按预期工作

我正在开发一个Web应用程序,我想查找不同时区的本地时间.我正在使用moment.js来完成这项任务.问题是返回时间不能按预期工作.例如:

moment().tz("Europe/London")._d;
Run Code Online (Sandbox Code Playgroud)

将返回2013年8月15日01:22:23 GMT + 0300(GTB日光时间)但同时在伦敦的当地时间是2013年8月14日星期四22:22:23所以有3小时的差异.谁能解释为什么会发生这种情况并提出解决方案?谢谢.

javascript momentjs

2
推荐指数
1
解决办法
1521
查看次数

Web API的缓存策略

我正在使用以下技术开发一个小博客应用程序:

  1. 用于后端的ASP.NET Web API.
  2. HTML,CSS和JavaScript(特别是KnockoutJS)

在内部我使用MemoryCache类.假设我想让用户能够添加/编辑/删除博客帖子.将包含所有博客文章的JSON保存到缓存中是一个好习惯吗?在现实世界中,会有大量的帖子,因此缓存的序列化/反序列化可能会成为一项昂贵的操作.另外,支持这些项目分页的最佳方法是什么?预先感谢您的帮助.

c# asp.net memorycache asp.net-web-api

1
推荐指数
1
解决办法
7899
查看次数