将IEnumerable类型的模型绑定到MVC POST是否有任何问题?
我的模型中的某些属性未绑定到操作的帖子.似乎模型上的属性就像字符串一样好,但我的IEnumerable是没有绑定的.
这是我的代码片段:
<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.Test) %>
<% for (int i = 0; i < Model.ResponseInfo.SubsetInfo.BandAvailabilities.Count(); i++)
{%>
<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)
以下是这些属性在模型中的样子:
public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; }
public string Test { get; set; }
Run Code Online (Sandbox Code Playgroud)
视图工作正常,并输出一个文本框列表,其中包含预期值.但是被解雇的帖子只会将Test字符串识别为属性.模型状态也不包含我的IEnumerable数据.
我一直在研究TFS2010与MSDeploy的新构建和部署功能.到目前为止一切进展顺利(虽然很难找到有关特定场景的信息).
我可以修改构建定义以指定要部署的2个或更多服务器吗?我需要做的是部署到多个服务器(因为我在我的测试环境中有两个使用NLB).
我现在拥有的是构建定义,构建,运行我的测试,然后部署到我的一个测试服务器(其上运行了MsDeployAgentService).它工作正常,每个Web项目都按其项目文件中的配置进行部署.我使用的MSBuild参数是:
* /p:DeployOnBuild=True
* /p:DeployTarget=MsDeployPublish
* /p:MSDeployServiceURL=http://oawww.testserver1.com.au/MsDeployAgentService
* /p:CreatePackageOnPublish=True
* /p:MsDeployPublishMethod=RemoteAgent
* /p:AllowUntrustedCertificated=True
* /p:UserName=myusername
* /p:Password=mypassword
Run Code Online (Sandbox Code Playgroud)
注意:我不使用/ p:DeployIISAppPath ="xyz",因为它没有部署我的所有项目并覆盖我的项目配置.
我可以添加另一个构建参数来让它调用多个MSDeployServiceURL吗?就像第二个/ p:MSDeployServiceURL参数,它指定另一个服务器?
或者我是否需要寻找其他解决方案,例如编辑WF?
我在2个月前看到了一个几乎完全相同的问题:TFS 2010 - 构建后部署到多个服务器,所以看起来我不是唯一一个试图解决这个问题的人.
我还发布了讨论MSDeploy的IIS.NET论坛:http://forums.iis.net/t/1170741.aspx .它有很多观点,但同样没有答案.
用我认为是一段非常简单的代码来踩我自己的脚趾.代码说的比文字更好,所以在这里.
public interface IResponse
{
IResult Result { get; set; }
}
public class Response<T> : IResponse
where T : IResult
{
public T Result { get; set; }
// COMPILER ERROR: Property 'Result' cannot be implemented property from interface 'IResponse'. Type should be 'IResult'.
}
Run Code Online (Sandbox Code Playgroud)
编译器不允许我这样做,因为IResponse要求Result为IResult,但是我想利用实现类中的泛型并强烈地将结果输入到T.这是不可能的,还是我错过了一些微不足道的东西?
我的理解是ASP.NET MVC只允许您将对象POST到Controller中的Actions,其中Action的参数接受已发布的对象作为Concrete类.
有什么方法可以解决这个问题,还是一个不错的选择?
在我的例子中,我有一个接受接口作为参数的动作:
public ActionResult SaveAdjustment(IModel model)
{
switch (model.SubsetType)
{
// factory like usage
}
}
Run Code Online (Sandbox Code Playgroud)
对于这个动作,我有很多视图,所有视图都强烈地输入到实现IModel的对象,我希望能够将这些视图发布到这个方法.
当然,运行这个给我错误:
无法创建接口的实例
有一个很好的工作吗?或者我是否需要为每个创建一个Action方法并将它们发送到这样的方法?
使用LINQ to Entities,我需要从PersonTable获取记录WHERE年龄介于AgesFrom和AgesTo之间.问题是,我需要从DateOfBirth和特定的DateToCalculate计算它们的Age,它们都存储在数据库中.
例如.PersonTable:DateOfBirth = 01/04/1972,DateToCalculateAge = 25/12/2011
.Where(0 < o.FormDate.AddYears(-agesFrom).CompareTo(o.FormDate.Subtract(o.Person.DateOfBirth)) &&
0 > o.FormDate.AddYears(-agesTo).CompareTo(o.FormDate.Subtract(o.Person.DateOfBirth));
// ----------------------- OR ------------------------
.Where(agesFrom <= CalculateAge(o.Person.DateOfBirth.Value, o.FormDate) &&
agesTo >= CalculateAge(o.Person.DateOfBirth.Value, o.FormDate);
Run Code Online (Sandbox Code Playgroud)
对于我提供的代码,我得到以下异常:"LINQ to Entities无法识别方法'System.DateTime AddYears(Int32)'方法,并且此方法无法转换为商店表达式."
我理解一旦LINQ将Query传递给db,我尝试使用的方法就无法翻译.有没有解决这个问题?我可以在点击数据库后过滤,但想避免那种瓶颈.我还想过添加一个sql函数来为我做这个计算,但是想先耗尽LINQ的可能性.
这里有一篇不错的帖子详细介绍了如何在查询之前更好地进行年龄计算: 在LINQ中检查年龄过滤器的最短方法?但是在我的情况下,我不是从DateTime.Now计算年龄,而是从数据库中的日期开始计算年龄.
.net ×2
asp.net-mvc ×2
c# ×2
interface ×2
action ×1
deployment ×1
generics ×1
ienumerable ×1
linq ×1
msbuild ×1
msdeploy ×1
tfs2010 ×1