使用RazorViewEngine,我可以这样做:
if (somecondition) {
<div> some stuff </div>
}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法做到这一点(Razor感到困惑):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
Run Code Online (Sandbox Code Playgroud)
我有一种情况需要将我的开始和结束html标签放在不同的代码块中 - 我怎样才能在Razor中执行此操作?
上下文:Asp.Net MVC3 w/Razor
我试图在Razor布局(以前的母版页)上放置一个登录表单,这样,当用户超时时,可以提示他/她登录而不被重定向(如在RallyDev中).因此,我在Ajax.BeginForm中创建了一个部分_LogOn.cshtml,其中包含所有必需的东西(用户名等),其中UpdateTargetId指向一个div,该div包含ajax表单内的登录控件.表单回发到AccountsController.RefreshLogOn操作,但显然,包含的页面可能是从不同的控制器呈现的.RefreshLogOn操作返回PartialView("_ LogOn").在任何情况下,我的期望/愿望是只替换此div中的控件.相反,我的页面位置更改为/ Accounts/RefreshLogon,整个页面被部分替换.我应该采取另一种方法吗?
这是相关的代码:
_LogOn.cshtml
@{
using (Ajax.BeginForm("RefreshLogOn", "Accounts",
new AjaxOptions {
OnSuccess = "logonSucceeded",
OnFailure = "logonFailed",
HttpMethod = "Post",
UpdateTargetId = "user-info" },
new { @id = "refresh"}))
{
@Html.AntiForgeryToken()
<div id="user-info">
<p>Your session has expired.</p>
<div class="error">@Html.ValidationSummary()</div>
<table>
<tr>
<td>Username:</td>
<td>@Html.TextBoxFor(model => model.UserName)</td>
</tr>
<tr>
<td>Password:</td>
<td>@Html.PasswordFor(model => model.Password)</td>
</tr>
<tr>
<td>Remember Me:</td>
<td>@Html.CheckBoxFor(model => model.RememberMe)</td>
</tr>
</table>
</div>
}
}
Run Code Online (Sandbox Code Playgroud)
AccountsController
public ActionResult RefreshLogOn (LogOnModel model)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password)) …Run Code Online (Sandbox Code Playgroud) 在RhinoMocks中,您可以告诉您的模拟IgnoreArguments作为一揽子声明.在Moq中,似乎必须为每个参数指定It.IsAny().但是,这不适用于ref和out参数.如何测试以下方法我需要Moq内部服务调用以返回特定结果:
public void MyMethod() {
// DoStuff
IList<SomeObject> errors = new List<SomeObject>();
var result = _service.DoSomething(ref errors, ref param1, param2);
// Do more stuff
}
Run Code Online (Sandbox Code Playgroud)
测试方法:
public void TestOfMyMethod() {
// Setup
var moqService = new Mock<IMyService>();
IList<String> errors;
var model = new MyModel();
// This returns null, presumably becuase "errors"
// here does not refer to the same object as "errors" in MyMethod
moqService.Setup(t => t.DoSomething(ref errors, ref model, It.IsAny<SomeType>()).
Returns(new OtherType()));
}
Run Code Online (Sandbox Code Playgroud)
更新:因此,将错误从"ref"更改为"out"有效.所以看起来真正的问题是有一个你不能注入的ref参数.
如果我完全破坏了DDD概念,请让我知道,这是我的两难选择.
假设我有以下域模型:
Teacher
IList<Class>
Class
Teacher
IList<Student>
Student
Class
Run Code Online (Sandbox Code Playgroud)
现在,从DDD的角度来看,教师似乎是我的根,事实上,在一个简单的应用程序中,我可以随身携带我的老师和她的班级和学生,并根据需要采取行动.但是在SOA情况下,假设我已经将我的老师,她的班级和学生拉下来用于显示目的(如dtos),并且她想要添加一名学生.当然,我不会将整个对象图发送到服务器并从数据库中检索域对象,以便我可以添加一个新学生,对吧?
这里的甜蜜点在哪里,还是我完全错过了船?
谢谢!
迟到:也许我正在回答我自己的问题,但我想一种方法是让我的教师服务有各种学生管理方法(AddStudent,UpdateStudent),这样我的root仍然可以管理所有内容,而不是每个对象有一个服务.
我正在尝试使用RazorViewEngine将MVC2站点转换为MVC3.
我使用此工具升级我的项目和Telerik转换器工具,将我的.aspx视图转换为Razor.Telerik工具@inherits在我的布局顶部放置一条线(从ViewMasterPage开始).
当我尝试运行使用其中一种布局的页面时,我收到错误:
... cshtml.Execute():找不到合适的方法来覆盖
我删除了@inherits标签,它开始适用于我的主页.但是,我继续使用相同的布局获取另一个页面的此错误.现在,在移动一些东西来处理区域问题之后,我又回到了为我的所有页面(无论如何我可以访问的页面)获取此错误.
我试过关闭Visual Studio,删除临时文件等.
我有一个MVC表单用于添加一个简单的实体.我正在使用TextBoxFor(model => model.FieldName)来创建输入字段.我有一个Save按钮和Save and New按钮."保存"和"新建"按钮应该回发到"保存"操作,然后使用空模型返回当前视图,以使用户能够添加另一个实体.但是,发生的情况是,即使模型确实为空,也会使用为前一个实体输入的值生成输入字段.希望这是有道理的.
我知道我可以做一个重定向,但这似乎是一个丑陋的解决方法,所以如果有人之前遇到过这种情况,我真的很感激一些意见.
谢谢.
我得到一个String.FormatException试图转换/解析文化不是非美国时的字符串.奇怪的是,字符串是通过应用与用于将其解析回字符串的格式和文化完全相同的格式和文化生成的.在下面的代码中,所有这些版本都将失败:
const string culture = "ja-JP";
const string format = "dd MMM yyyy"; //error in orignal post included {0:}
CultureInfo info = new CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = info;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture);
//string toParse = String.Format(info, format, DateTime.Now); //error in original post
string toParse = DateTime.Now.ToString(format);
System.Diagnostics.Debug.WriteLine(string.Format("Culture format = {0}, Date = {1}", culture, toParse));
try
{
DateTime output = DateTime.ParseExact(toParse, format, CultureInfo.InvariantCulture);
//DateTime output = DateTime.ParseExact(toParse, format, info);
//DateTime output = DateTime.ParseExact(toParse, format, info, DateTimeStyles.None);
//DateTime output = Convert.ToDateTime(toParse, … 使用LINQ to Sql,您可以为给定的提取指定您不希望加载特定子元素(急切或懒惰).这在NHibernate有可能吗?有时我只想要根对象和/或只是对象图的一部分,我希望能够指定而不是必须编写DTO并进行映射以解决NHibernate感觉到的事实如果我尝试序列化我的对象,则强制加载所有内容.
谢谢!
我们有一个ASP.NET MVC应用程序,使用IoC将服务引用注入控制器,将存储库引用注入服务.
控制器必须具有瞬态寿命,因为它们必须根据请求进行实例化.但是,如果整个IoC堆栈按请求进行新增,则会产生一些开销.我们有比我想要的更多的依赖项,一个选项是拥有更多的控制器,每个控制器在堆栈中具有更少的依赖性.但是,暂时把它放在一边,我的问题是,如果一个注入单身的对象具有一个具有瞬态生命周期的依赖关系,那么这些依赖关系是否会因为被Singleton拥有而被视为单身?
具体来说,如果我们有以下内容
RepositoryA(需要是瞬态的,因为当前设计在构造函数中注入用户上下文)ServiceA(单例)ControllerA(瞬态)
实例化如下:
public ServiceA(IRepositoryA repo) {}
public ControllerA(IServiceA service) {}
Run Code Online (Sandbox Code Playgroud)
RepositoryA实际上是否会被实例化一次因为ServiceA被实例化一次?
我99%肯定答案是肯定的,但只想确认我必须在这里做的重构数量.
另外,假设服务和存储库没有任何用户/请求特定的实例变量,作为一种设计方法,是否有任何理由不对它们使用Singleton生命周期?
c# ×2
razor ×2
asp.net-mvc ×1
culture ×1
datetime ×1
jquery ×1
moq ×1
nhibernate ×1
soa ×1
tfs ×1