小编Sla*_*uma的帖子

如何在ASP.NET MVC 3中以特定格式呈现DateTime?

如果我在我的模型类中有一个类型的属性,DateTime我该如何以特定的格式呈现它 - 例如以ToLongDateString()返回的格式?

我试过这个......

@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
Run Code Online (Sandbox Code Playgroud)

...抛出异常,因为表达式必须指向属性或字段.还有这个...

@{var val = item.MyDateTime.ToLongDateString();
  Html.DisplayFor(modelItem => val);
}
Run Code Online (Sandbox Code Playgroud)

...它不会抛出异常,但渲染的输出为空(尽管val包含预期值,正如我在调试器中看到的那样).

感谢提前提示!

编辑

ToLongDateString只是一个例子.我真的想使用,而不是ToLongDateString为一个自定义的扩展方法DateTimeDateTime?:

public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
    if (dateTime.TimeOfDay == TimeSpan.Zero)
        return dateTime.ToString("d");
    else
        return dateTime.ToString("g");
}

public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
    if (dateTime.HasValue)
        return dateTime.Value.FormatDateTimeHideMidNight();
    else
        return "";
}
Run Code Online (Sandbox Code Playgroud)

所以,我认为我不能在ViewModel属性上使用DisplayFormat属性和DataFormatString参数.

asp.net asp.net-mvc asp.net-mvc-3

117
推荐指数
6
解决办法
21万
查看次数

在WPF DataGrid中绑定ComboBoxColumn的ItemsSource

我有两个简单的Model类和一个ViewModel ...

public class GridItem
{
    public string Name { get; set; }
    public int CompanyID { get; set; }
}

public class CompanyItem
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class ViewModel
{
    public ViewModel()
    {
        GridItems = new ObservableCollection<GridItem>() {
            new GridItem() { Name = "Jim", CompanyID = 1 } };

        CompanyItems = new ObservableCollection<CompanyItem>() {
            new CompanyItem() { ID = 1, Name = "Company 1" },
            new …
Run Code Online (Sandbox Code Playgroud)

.net wpf binding wpfdatagrid datagridcomboboxcolumn

73
推荐指数
5
解决办法
10万
查看次数

如何在自定义WebAPI HttpMessageHandler中安全地设置用户主体?

对于基本身份验证,我已经实现了一个HttpMessageHandler基于Darin Dimitrov在这里回答的示例的自定义:https://stackoverflow.com/a/11536349/270591

代码创建具有用户名和角色principal的类型实例,GenericPrincipal然后将此主体设置为线程的当前主体:

Thread.CurrentPrincipal = principal;
Run Code Online (Sandbox Code Playgroud)

稍后在ApiController方法中,可以通过访问controllers User属性来读取主体:

public class ValuesController : ApiController
{
    public void Post(TestModel model)
    {
        var user = User; // this should be the principal set in the handler
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,直到我最近添加了一个MediaTypeFormatter使用该Task库的自定义,如下所示:

public override Task<object> ReadFromStreamAsync(Type type, Stream readStream,
    HttpContent content, IFormatterLogger formatterLogger)
{
    var task = Task.Factory.StartNew(() =>
    {
        // some formatting happens and finally a TestModel is …
Run Code Online (Sandbox Code Playgroud)

.net asp.net security asp.net-mvc asp.net-web-api

50
推荐指数
3
解决办法
4万
查看次数

如何使用Entity Framework和EntityState.Modified更新对象的每个字段

我需要为给定的实体对象更新除property1和property2之外的所有字段.
有这个代码:

    [HttpPost]
    public ActionResult Add(object obj)
    {
        if (ModelState.IsValid)
        {
                context.Entry(obj).State = System.Data.EntityState.Modified;

                context.SaveChanges();               
         }
        return View(obj);
    }
Run Code Online (Sandbox Code Playgroud)

如何更改它以向obj.property1和obj.property2添加例外,以便不使用此代码进行更新?

entity-framework entity-framework-4.1

35
推荐指数
3
解决办法
4万
查看次数

将键/值对列表序列化为XML

我有一个键/值对列表,我想存储和从XML文件中检索.所以此任务与此处描述的类似.我试图遵循标记答案中的建议(使用KeyValuePairXmlSerializer),但我没有得到它的工作.

到目前为止,我所拥有的是"设置"课程......

public class Settings
{
    public int simpleValue;
    public List<KeyValuePair<string, int>> list;
}
Run Code Online (Sandbox Code Playgroud)

......这个班的一个例子......

Settings aSettings = new Settings();

aSettings.simpleValue = 2;

aSettings.list = new List<KeyValuePair<string, int>>();
aSettings.list.Add(new KeyValuePair<string, int>("m1", 1));
aSettings.list.Add(new KeyValuePair<string, int>("m2", 2));
Run Code Online (Sandbox Code Playgroud)

...以及将该实例写入XML文件的以下代码:

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c:\\testfile.xml");
serializer.Serialize(writer, aSettings);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

生成的文件是:

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <simpleValue>2</simpleValue>
  <list>
    <KeyValuePairOfStringInt32 />
    <KeyValuePairOfStringInt32 />
  </list>
</Settings>
Run Code Online (Sandbox Code Playgroud)

因此,虽然元素的数量是正确的,但是我的列表中的对的键和值都没有存储.显然我做的事情基本上是错的.我的问题是:

  • 如何将列表的键/值对存储在文件中?
  • 如何将列表中元素的默认生成名称"KeyValuePairOfStringInt32"更改为我想要的其他名称,如"listElement"?

.net xml list xml-serialization

30
推荐指数
1
解决办法
3万
查看次数

对ASP.NET Web API的所有请求都返回404错误

我有一个包含Web API的ASP.NET MVC 4网站.该站点在Windows 8上使用Visual Studio 2012和.NET 4.5进行开发和测试,其中IIS Express作为Web服务器.在这个开发环境中一切正常.

现在它部署在带有IIS 7.5的Windows 2008 R2(SP1)服务器上.安装了.NET 4.0和4.5.应用程序池在.NET 4.0中以集成管道模式运行.

在这个生产环境中,MVC网站可以正常工作,而Web API却没有.对于每个请求,无论GET还是POST,我都会收到404错误.如果我只是在浏览器中输入Web API Url(在服务器上本地打开IE 9)来运行GET请求,我会得到一个404页面.如果我从Web API客户端应用程序发出POST请求,我也会收到404消息:

未找到与请求URI匹配的HTTP资源

我已经创建了一个带有MVC 4和Web API的测试网站,并将其部署在同一台服务器上并且Web API正常工作.Web API和MVC程序集在两个项目中具有相同的版本号.

此外,我已将Web API Route Debugger添加到应用程序中.如果我使用有效路线,http://myserver/api/order/12我得到以下结果:

路由调试器

对我来说,这意味着正确的路由模板Api/{Controller}/{Id}已发现并正确地解析成一个控制器OrderId=12.控制器(派生自ApiController)存在于Web组件中,其中所有MVC控制器也是如此.

但是,我不知道状态000可能意味着什么以及为什么没有显示"路由选择"部分(通常情况下即使程序集不包含单个部分ApiController,请参见上面链接页面上的屏幕截图).不知何故,它看起来没有ApiController被发现甚至没有被搜索过,或者搜索无声地失败.

IIS日志文件没有显示任何有用的内容.更改各种应用程序池设置并使用相同的应用程序池进行测试和实际应用程序没有帮助.

我目前正在从应用程序中删除"功能",配置设置,第三方程序集等,最终将其降低到测试应用程序的小尺寸,并希望在某些时候它开始工作.

有人知道问题是什么吗?此外,任何可能找到原因的调试或记录想法都是非常受欢迎的.

编辑

感谢Darrel Miller在下面评论中的提示,我已经集成了针对ASP.NET Web Api的跟踪.

对于(GET)请求URL,http://myserver/api/order/12我得到以下内容:

  • 在开发环境中,成功(简短形式):

消息:http://localhost:50020/api/order/12; 类别:System.Web.Http.Request

控制器选择和实例化......

运算符:DefaultHttpControllerSelector; 操作:SelectController; 消息:Route ="controller:order,id:12"; 类别:System.Web.Http.Controllers

运算符:DefaultHttpControllerSelector; …

.net asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

29
推荐指数
2
解决办法
6万
查看次数

实体框架中的自引用/父子关系

我阅读了很多程序员的帖子,这些帖子遇​​到了Unable,以确定依赖操作的有效排序.在实体框架中使用自引用关系时,由于外键约束,模型要求或存储生成的值 -例外,可能存在依赖关系.

我正在努力建立一个亲子关系:

public class Category {
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Category Parent { get; set; }
    public List<Category> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我使用的配置(Fluent API):

Property(c => c.ParentId).IsOptional();
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId);
Run Code Online (Sandbox Code Playgroud)

当我尝试保存这样的新类别时,HasMany()和HasOptional()配置都会导致"无法确定依赖操作的有效排序..."异常:

context.Categories.Add(new Category { Name = "test" });
Run Code Online (Sandbox Code Playgroud)

我不明白为什么EF不插入带有null parentId的Category.数据库允许ParentId外键为null.

你能告诉我怎么做吗?

entity-framework parent-child self-reference ef-code-first entity-framework-4.1

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

如何在验证失败后阻止页面跳转到顶部位置?

我有一个简单的aspx页面,其中包含一些TextBox和一个提交按钮.某些字段是必需的,按钮下方是ValidationSummary.完整的表单大于屏幕高度,因此必须向下滚动才能到达提交按钮.如果我没有填写所有必填字段并单击提交验证按预期失败,验证摘要会在按钮下方显示一些信息消息.验证发生在客户端上,不会发生回发.

所以这一切都是有希望的.但令人不安的是,当我点击提交按钮时,页面会移动("跳转")到顶部位置.要查看验证摘要,必须再次向下移动页面.

我试图将ShowSummary属性设置为false(这没有多大意义):验证仍然有效(没有回发)但在这种情况下页面不会移动到顶部位置.所以问题似乎取决于渲染验证文本.

有没有办法防止这个页面跳转?

先感谢您!

更新:

我上面描述的行为似乎不依赖于浏览器.我已经在五种不同的浏览器中进行了测试,并且它在各处都是相同的.

asp.net validation validationsummary

24
推荐指数
3
解决办法
4万
查看次数

在EF 4.1中显式加载孙子集合

鉴于以下模型......

public class Parent
{
    public int Id { get; set; }
    public ICollection<Child> Children { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public ICollection<Grandchild> Grandchildren { get; set; }
}

public class Grandchild
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...我们能渴望负载Include一个Parent与所有ChildrenGrandchildren一步到位,像这样:

context.Parents.Include(p => p.Children.Select(c => c.Grandchildren))
Run Code Online (Sandbox Code Playgroud)

显式加载有类似的可能吗?

可以通过以下方式明确加载子集合:

Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();
Run Code Online (Sandbox Code Playgroud)

但试图以与Include... …

.net entity-framework entity-framework-4.1

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

将PDF文件存储为SQL Server中的二进制对象,是或否?

我必须为以下任务找到设计决策:

我有一个SQL Server数据库,它包含一个订单表.用户可以通过从网页上传的简单文件上传PDF文档并将其分配给订单.每个订单不超过一个文档(可能没有文档,从不超过一个).为此,用户打开网页,输入订单号,显示订单并单击上传按钮.所以我知道上传的文件属于哪个顺序.

现在我正在考虑将两种文件存储在Web服务器上的选项:

1)通过varbinary(MAX)列扩展我的订单表,并将PDF文档直接存储到该二进制字段中.

2)将PDF文件保存在磁盘上的特定文件夹中,并为其指定与订单相关的唯一名称(例如,我的订单号是数据库中的主键,或者是我可以存储在其他列中的GUID).订购表).也许我必须将文件存储在子文件夹中,每月一个,并将子文件夹名称存储到数据库的订单行中,以避免在一个文件夹中获取过多的文件.

存储PDF文件后,可以在输入相关订单号后通过浏览器下载和查看.

我倾向于选项(1),因为数据管理似乎更容易让我在一个数据库中拥有所有相关数据.但是我有点担心随着时间的推移我会遇到性能问题,因为我的数据库大小比解决方案(2)增长得快得多.大约90%甚至95%的数据库总大小仅由那些存储的PDF文件组成.

以下是一些其他信息:

  • PDF文件的大小约为100千字节
  • 每月大约1500个订单/ PDF文件
  • Windows Server 2008 R2/IIS 7.5
  • SQL Server 2008 SP1 Express
  • 不太确定硬件,我相信一个QuadCore Proc.和4 GB RAM
  • 应用程序是用ASP.NET Webforms 3.5 SP1编写的

(我知道在使用上述数字大约2年后,我将达到SQL Server Express版本的4GB限制.但我们可以忽略这一点,从数据库中删除旧数据或升级到完整许可证将是可能的选择.)

我的问题是:选项的Pro和Contra是什么,你会推荐什么?也许某人有类似的任务,可以报告他的经历.

提前谢谢你的回复!

有关:

在DB中存储图像 - 是还是不?

sql-server asp.net database-design binary-data

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