小编Nat*_*lor的帖子

将其他ViewData传递给强类型的局部视图

我有一个强类型的局部视图,它接受一个ProductImage,当它被渲染时,我还想为它提供一些我在包含页面中动态创建的额外ViewData.如何通过RenderPartial调用将强类型对象和自定义ViewData传递给局部视图?

var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
  Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
  index++;
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc viewdata asp.net-mvc-partialview

169
推荐指数
6
解决办法
11万
查看次数

从相对路径和/或文件名解析绝对路径

Windows批处理脚本中是否有一种方法可以从包含文件名和/或相对路径的值返回绝对路径?

鉴于:

"..\"
"..\somefile.txt"
Run Code Online (Sandbox Code Playgroud)

我需要相对于批处理文件的绝对路径.

例:

  • "somefile.txt"位于"C:\ Foo"中
  • "test.bat"位于"C:\ Foo\Bar"中.
  • 用户在"C:\ Foo"中打开命令窗口并调用 Bar\test.bat ..\somefile.txt
  • 在批处理文件中,"C:\ Foo\somefile.txt"将派生自 %1

windows batch-file relative-path absolute-path

147
推荐指数
8
解决办法
22万
查看次数

如何从ActionFilter访问ModelState?

我正在构建一个ActionFilter重用一些代码用于简单的垃圾邮件块 - 基本上我所做的是我有一个Html Helper方法来呈现输入文本框和一个隐藏的输入,并在ActionFilter中我检查这两个值是否相同.如果没有,我想利用我的验证逻辑的其余部分并添加一个ModelStateErrorModelState,但我怎么做呢?如何添加一个ModelStateError来自whithin ActionFilter

更新:这是我正在尝试的代码.当我测试具有此属性的控制器操作时,即使我没有传递任何所需的表单值,ModelState.IsValid仍然会返回true:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var r = filterContext.HttpContext.Request;
    if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"]))
    {
        filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage);
    }
    base.OnActionExecuting(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

这是ActionMethod:

[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
    if (ModelState.IsValid)
    {
        _posts.Add(postToCreate);
        return RedirectToAction("Index");
    }
    return View();
}
Run Code Online (Sandbox Code Playgroud)

我只是注意到,如果我在OnActionExecuting方法中设置了一个断点并点击"Debug tests",那么断点就永远不会被击中.为什么?

asp.net-mvc modelstate action-filter

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

使用ASP.NET Web API支持PUT和DELETE的CORS

我正在使用ASP.NET Web API的最终版本来实现一个JavaScript友好的API.根据各种教程,我在web.config中启用了CORS:

<system.webServer>
 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
 </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

有了上述,跨域GET和POST请求工作正常,但PUT和DELETE请求都失败.

在Chrome中:

Access-Control-Allow-Methods不允许使用方法PUT.

Access-Control-Allow-Methods不允许使用DELETE方法.

是否需要一些额外的东西来让PUT和DELETE动词跨域工作?

asp.net cross-domain cors asp.net-web-api

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

实体框架 - 清除子集合

我遇到了一个有趣的Entity Framework问题,基于我必须使用的代码解决它我怀疑我的解决方案不太理想.我在表A和表B之间具有1对多的关系,其中表B中的实体具有对TableA的引用.我有一个场景,我想同时删除TableA中连续的所有子项,我认为这可以通过简单地清除集合来实现:

Entity.Children.Clear()
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试保存更改时,这会产生外键违规.

正在从AssociationSet'FK_EntityB_EntityA'添加或删除关系.对于基数约束,还必须添加或删除相应的"EntityB".

我想出的解决方案是通过实体上下文的DeleteObject()手动删除对象,但我只知道我使用的这个逻辑必定是错误的.

while (collection.Any())
    Entities.DeleteObject(collection.First());
Run Code Online (Sandbox Code Playgroud)

首先,我必须使用Where()循环的事实似乎远远不够理想,但我认为这纯粹是我的语义评估.在任何情况下,我是如何做到这一点的,或者是否有更好的方法来清除实体的子实体集合,以便实体框架正确地调用所有被删除对象上的数据存储删除?

entity-framework

26
推荐指数
3
解决办法
2万
查看次数

CKEditor图像上传

我希望在我正在进行的项目中包含CKEditor,我需要CKFinder插件提供的图像上传支持,但是我并不特别需要CKFinder工具的其余部分,因此购买许可证有点过分.有没有人花时间为CKEditor 3实现一个可以与ASP.NET MVC一起使用的自定义图像上传器?如果需要我可以创建我自己的,只是想先在这里查看.

或者,有没有人知道一个体面的WYSIWYG编辑器与支持图像上传的CKEditor/Cute Editor相同,并且可以在ASP.NET MVC中使用?

asp.net-mvc wysiwyg image-uploading ckeditor

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

ELMAH - 过滤404错误

我正在尝试配置ELMAH来过滤404错误,我在Web.config文件中遇到了XML提供的过滤规则.我按照这里这里的教程,<is-type binding="BaseException" type="System.IO.FileNotFoundException" />在我的<test><or>...声明中添加了一个声明,但完全失败了.

当我在本地测试它时,我void ErrorLog_Filtering() {}在Global.asax中插入了一个断点,并发现System.Web.HttpExceptionASP.NET为404 启动的那个似乎没有基本类型System.IO.FileNotFound,而是它只是一个System.Web.HttpException.我通过调用e.Exception.GetBaseException().GetType()事件处理程序来测试它.

接下来我决定尝试一个<regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />希望任何匹配模式"文件'/ foo.ext'不存在"的异常消息将被过滤,但这也没有效果.作为最后的手段我尝试过<is-type binding="BaseException" type="System.Exception" />,甚至完全无视.

我倾向于认为ELMAH存在配置错误,但我没有看到任何错误.我错过了一些明显的东西吗?

这是我的web.config中的相关内容:

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>
  <elmah>
    <errorFilter>
      <test>
        <or>
          <equal binding="HttpStatusCode" value="404" type="Int32" …
Run Code Online (Sandbox Code Playgroud)

asp.net filtering elmah

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

Code Golf - 根据当前页面生成附近的页码

挑战在于创建一种算法,用于基于该序列中的当前位置在序列中生成特定大小的数字子集.

在Stack Overflow或Digg等繁忙网站上浏览多页内容时,通常需要为用户提供一种快速跳转到第一页,最后一页或当前页面附近的特定页面的方法.观看.

要求

  • 始终显示第一页和最后一页
  • 页码的子集将包含当前页码以及它之前和/或之后的页码(取决于当前页面)
  • 页码的子集将始终是固定数量的页面,并且永远不会超过或低于该固定数量,除非:
    • totalPages < fixedWidth
  • 除非符合以下情况,否则子集中当前页码的位置是固定的:
    • 1 <= currentPage < (fixedWidth - defaultPostion) 要么
    • (totalPages - currentPage) < (fixedWidth - defaultPostion)
  • 输出应指示第一页数据与子集的第一页之间以及子集的最后一页与最后一页数据之间是否存在大于0的差异.该指标在任一位置最多应出现一次.

如果您还无法想象,请查看问题/答案下的Stack Overflow配置文件.如果你有一个超过10个,你应该在底部看到以这种方式生成的分页链接.那,或滚动到http://digg.com的底部,并观察他们的分页控制.

例子

所有示例都假设子集大小为5,当前页面位于第3位,但这些应该可以在您的解决方案中进行配置....表示页码之间的差距,[x]表示当前页面.


当前页:1/30

输出: [x][2][3][4][5]...[30]


当前页:2/30

输出: [1][x][3][4][5]...[30]


当前页:13/30

输出: [1]...[11][12][x][14][15]...[30]


当前页:27/30

输出: [1]...[25][26][x][28][29][30]


当前页:30/30

输出: [1]...[26][27][28][29][x]


当前页:3/6

输出: [1][2][x][4][5][6]


当前页:4/7

输出: [1][2][3][x][5][6][7]


额外的澄清

  • 第一页和最后一页不计入计 numberOfPages,除非它们依次是一部分numberOfPages[1][x][3][4][5]...[30][1]...[26][27][28][x][30],但不是在 [1]...[8][9][x][11][12]...[30]
  • 没有间隙指示器应当包括如果子集的任一端与所述第一页或最后一页之间的距离小于1.因此,有可能具有的网页的非破坏序列至多 fixedWidth + 2[1][2][3][x][5][6]...[15] …

algorithm code-golf rosetta-stone

20
推荐指数
2
解决办法
1176
查看次数

ASP.NET MVC - 接口类型上的自定义模型绑定器

我不确定这种行为是否是预期的,但是当绑定分配给接口类型时,似乎自定义模型绑定不起作用.有人试过这个吗?

public interface ISomeModel {}
public class SomeModel : ISomeModel {}

public class MvcApplication : HttpApplication {
    protected void Application_Start(object sender, EventArgs e) {
        ModelBinders.Binders[typeof(ISomeModel)] = new MyCustomModelBinder();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,当我绑定到SomeModel类型的模型时,MyCustomModelBinder永远不会被击中; 但是,如果我改变了上面的代码,并替代typeof(ISomeModel)typeof(SomeModel)预期并张贴完全相同的形式MyCustomModelBinder被调用.那似乎对吗?


编辑

在我最初提出这个问题一年后,我发现自己已经陷入了这种困境,现在我有一个有效的解决方案.谢谢Matt Hidinger!

http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx

asp.net-mvc interface modelbinders

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

ASP.NET MVC2 - 自定义模型绑定器示例

我试图找到一些为我需要处理的独特绑定场景构建自定义模型绑定器的示例,但我发现的所有文章都是针对MVC2中不再相关的旧版MVC.我一直在引用DefaultModelBinder源代码,试图对我需要做的事情有一个普遍的感觉,但它比我的场景更复杂,我无法隔离我需要实现的特定逻辑.

我的目标是获取一组Checkbox/Textbox对,并且对于所有Checked对,我想创建Checkbox值和关联Textbox值的键/值对.在聚合这些数据之后,我需要对集​​合进行一些字符串序列化,这样我就可以将它存储在所需Model类型的字符串属性中.我已经以可管理的格式从表单发送数据,这将允许我将给定的复选框与特定的文本框相关联,这只是找出如何获取所需的所有部分的问题.

有谁知道一些最新的教程可以让我开始构建自定义模型绑定器?

asp.net-mvc modelbinders custom-model-binder asp.net-mvc-2

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