我正在创建一个小应用程序来自学ASP.NET MVC和JQuery,其中一个页面是一个项目列表,其中一些可以选择.然后我想按下一个按钮并使用JQuery的Post函数向我的控制器发送一个List(或类似的东西),其中包含所选项目的ID.
我设法得到一个数组,其中包含所选元素的ID,现在我想发布它.我可以这样做的一种方法是在我的页面中有一个虚拟表单,带有隐藏值,然后使用所选项目设置隐藏值,并发布该表单; 不过,这看起来很狡猾.
有没有更简洁的方法来实现这一点,通过将阵列直接发送到控制器?我尝试了一些不同的东西,但看起来控制器无法映射它接收的数据.这是迄今为止的代码:
function generateList(selectedValues) {
var s = {
values: selectedValues //selectedValues is an array of string
};
$.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");
}
Run Code Online (Sandbox Code Playgroud)
然后我的控制器看起来像这样
public ActionResult GenerateList(List<string> values)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
我设法获得的只是控制器参数中的"null"...
有小费吗?
我有一个带有2个方法的ProductRepository,GetAllProducts和GetProductByType,我想在GetProductByType上测试逻辑.在内部,GetProductByType调用GetAllProducts,然后过滤正确的.
public virtual IEnumerable<Product> GetAllProducts()
{
//returns all products in memory, db etc
}
public virtual IEnumerable<Product> GetProductsByType(string type)
{
return (from p in GetAllProducts() where p.Type == type select p).ToList();
}
Run Code Online (Sandbox Code Playgroud)
因此,在我的测试中,我想模拟对GetAllProducts的调用,因此它返回在我的测试中定义的产品列表,然后调用原始的GetProductsByType,它将使用模拟的GetAllProducts.
我正在尝试类似下面的代码,但原始的GetProductByType没有被执行,它也被模拟了.在TypeMock中,我有一个CallOriginal方法来解决这个问题,但我无法用Moq来解决这个问题.有任何想法吗?
var mock = new Mock<ProductRepository>();
mock.Setup(r => r.GetAllProducts()).Returns(new List<Product>() {p1, p2, p3});
var result = mock.Object.GetProductsByType("Type1");
Assert.AreEqual(2, result.Count());
Run Code Online (Sandbox Code Playgroud) 我从Word生成了一些丑陋的HTML,我想从中删除所有HTML注释.
HTML看起来像这样:
<!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML/> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>NO-BOK</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]-->
Run Code Online (Sandbox Code Playgroud)
..我正在使用的正则表达式就是这个
html = html.replace(/<!--(.*?)-->/gm, "")
Run Code Online (Sandbox Code Playgroud)
但似乎没有匹配,字符串不变.
我错过了什么?
我看到很多TDD从业者遵循这个周期:
1)编写测试,就好像目标对象和API已经存在一样.
2)编译解决方案并看到它中断.
3)编写足够的代码以使其编译.
4)运行测试,看看是否失败.
5)编写足够的代码以使其通过.
6)运行测试并看到它通过
7)重构
步骤1和2的优点是什么?对于像Visual Studio这样的IDE,这真的很烦人,因为intellisense跳到那里试图猜测不存在的方法和属性.
我通常从第3步开始,让我的所有方法都抛出NotImplementedException,这对我来说似乎很好,但也许我错过了一些东西.
编辑以澄清:这不是一个问题,为什么我应该看到测试在通过之前失败; 从第3步开始,这是完全有道理的.我的问题是为什么甚至在此之前人们会在单元测试中调用API中不存在的方法(因此VS将显示红色波形,或者将整个方法名称描绘为红色等)并尝试编译.对我而言,VS告诉我该方法不存在的事实已经足够了.
根据官方(格里高利)日历,2008年12月29日的周数为1,因为在第52周的最后一天(即28/12)之后,该年剩下三天或更少的天数.有点奇怪,但没关系,规则是规则.
因此,根据这个日历,我们有2008/2009年的这些边界值
C#提供了一个GregorianCalendar类,它有一个函数GetWeekOfYear(date, rule, firstDayOfWeek).
该参数rule是一个包含3个可能值的枚举:FirstDay, FirstFourWeekDay, FirstFullWeek.根据我的理解,我应该FirstFourWeekDay遵守规则,但我尝试了所有这些以防万一.
最后一个参数通知哪个工作日应该被视为一周的第一天,根据该日历,它是星期一,所以它是星期一.
所以我启动了一个快速而肮脏的控制台应用程序来测试这个:
using System;
using System.Globalization;
namespace CalendarTest
{
class Program
{
static void Main(string[] args)
{
var cal = new GregorianCalendar();
var firstWeekDay = DayOfWeek.Monday;
var twentyEighth = new DateTime(2008, 12, 28);
var twentyNinth = new DateTime(2008, 12, 29);
var firstJan = new DateTime(2009, 1, 1);
var eightJan = new DateTime(2009, 1, 8);
PrintWeekDays(cal, twentyEighth, firstWeekDay);
PrintWeekDays(cal, …Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关ASP.NET MVC,SOLID等的一些内容,我正在尝试为中小型ASP.NET MVC应用程序找出一个简单的"配方",将这些概念放在一起; 我最关心的问题是结果是控制器太复杂,就像webforms中的代码隐藏文件一样,所有类型的业务逻辑都包含在其中.
我正在考虑以下架构,用于小型数据驱动的应用程序:
IRepository<T>,使用依赖注入,是我的db代码所在的位置; 只接收并返回POCO.我正在考虑在控制器和模型之间提供服务,但如果它们只是传递方法调用,我不确定它会有多大用处.
最后应该有包含模型代码的单元测试,以及覆盖存储库代码的单元+集成测试(如果可能的话,遵循"红绿"实践)
思考?
architecture model-view-controller asp.net-mvc poco repository-pattern
我想为DHTML菜单调试CSS,但我要调试的元素是一个子菜单,所以它只在单击菜单中的顶部元素时出现.
所以我不能在Firebug上使用那个按钮来显示单击下一个元素的CSS,因为当我单击顶部菜单项时,它将显示该元素的CSS,而不是它的子元素,如果我首先展开菜单,然后单击Firebug按钮,子菜单消失(当它失去焦点时消失).
关于如何摆脱这个捕获22的任何提示?
我有一些访问window.localStorage的javascript代码,它在大多数机器上工作正常,但在其中一个(IE8 compat视图,Windows 7 64)我得到错误"系统无法找到指定的路径"每当我尝试阅读window.localStorage.我试图在SO和Google上找到一些关于它的讨论(没有雪茄),并且没有在浏览器的选项中找到任何可疑的设置.有没有人遇到过这个错误,并为它解决了问题?我可以在window.localStorage周围尝试/捕获,但我宁愿了解发生了什么.
这可能是我做过的最愚蠢的问题,但为什么下面的文字没有呈现红色?
<html>
<style>
.c1 .c2 {
color: red;
}
</style>
<body>
<span class="c1 c2">This should be red</span>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
编辑:我想匹配包含c1和c2类的元素,如上面的例子,不能少.
asp.net-mvc ×2
c# ×2
css ×2
javascript ×2
.net ×1
architecture ×1
calendar ×1
firebug ×1
jquery ×1
json ×1
mocking ×1
moq ×1
poco ×1
regex ×1
tdd ×1
unit-testing ×1
week-number ×1