我有兴趣知道你们认为应该被视为UpdateModelASP.NET MVC 中的方法的"正确行为" .
我在这里问的原因可能是,如果这个功能是"按设计",有人可以澄清为什么它是这样的,也许是一种方式来调用它来实现所需的功能,我想这将是90百分之百的民众希望这个有用吗?
从本质上讲,我的抱怨在于绑定过程中的行为UpdateModel.
假设您希望通过简单的Save操作方法更新表单,表单上的数据字段反映了数据库中的模型,最初要保存请求,我们可能会从数据库中获取现有模型,然后更新相关字段哪些更改,发送FormCollection,然后更新UpdateModel到我们现有的模型.这个函数,但是看起来这个DB填充对象的任何现有属性都被"重置"; 并且我的意思是,被设置为null或初始化默认值就像它是一个全新的对象,除了显然那些与那些匹配的对象FormCollection.
这是一个问题,因为对象上存在的任何现有属性,但不一定存在于表单上,例如任何子集合或对象,日期或任何非UI面向字段都是空的,留下半人满,更多或者由于所有丢失的数据(包括现在可能设置为0的ID堆栈)而无法保存到DB的较少的不可用对象.
我认为这不是理想的行为,UpdateModel只应更新找到属性匹配的属性FormCollection.这意味着您的所有现有属性都将保持不变,但您的更新将被设置.但是,从目前为止推断的内容来看,显然情况并非如此 - 它似乎实例化了一个全新的对象副本,从表单中更新属性,然后返回新对象.
最后,为了了解这是多少负担,保存半复杂形式并保留所有现有对象数据的唯一方法是手动将每个属性与相应的表单属性结合到绝对保证仅更新表单中存在的属性.
我猜,
请随时提出你对这些家伙的看法,谢谢.
以下是遇到此问题的另一个实例:
使用一组复杂数据类型调用UpdateModel会重置所有非绑定值吗?
我想在ASP.NET MVC中SelectList()为a 分配静态项目列表,Html.DropDownList()最佳做法是什么?
我正打算尝试找到一种使用的方法new SelectList(new {key = "value"}...但是一种方法不起作用,而另外两种方法,如果我的静态列表ViewData无论如何被宣告并传递给我,我会在这里违反法律IList/IENumerable吗?
什么被认为是复制[克隆] LINQ to SQL实体导致数据库中新记录的最佳实践?
上下文是我希望为管理员的网格中的记录创建重复的功能.网站和尝试了一些事情和明显的,读取数据后,改变ID = 0,更改名称submitChanges(),并点击异常,大声笑.我想我可能会停下来问一位专家.
我希望首先阅读记录,通过在"Copy Of"前面添加名称然后另存为新记录来更改名称.
从我所看到的,似乎没有功能来实现Windows RT中TextBlocks或HyperlinkButtons等的下划线,这看起来很荒谬,但无论如何,是否有人有一个优雅的方法来解决这个问题,特别是创建一个链接,运行Click事件或绑定命令?
您可以看到开箱即用的支持似乎不存在:http://social.msdn.microsoft.com/Forums/en-CA/winappswithcsharp/thread/cba0c363-60da-4e
在使用ASP.NET MVC 3 RC1的VS 2010中,这些快捷键似乎都不适用于我.
我特别想用CTRL+ M,CTRL+ G来"转到控制器",但我一直收到错误:
组合键(CTRL + M,CTRL + G)绑定到当前不可用的命令(Go To Controller).
由VS IDE引发.我已经在源代码模式的ASPX视图文件中尝试了这一点,但没有运气.对于尝试过的所有快捷方式,我收到相同的错误.
PS:我正在运行ReSharper 5; 这会干扰吗?
我最近将此代码迁移到Entity Framework 4,但它失败了.显然,如果status没有值,则返回所有匹配项,如果它的值匹配的话user.StatusID == 1.
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
(!status.HasValue || user.StatusID == 1)
);
Run Code Online (Sandbox Code Playgroud)
返回异常:
ArgumentException: The specified value is not an instance of type 'Edm.Int32'
Parameter name: value
Run Code Online (Sandbox Code Playgroud)
但是,删除条件测试,它工作正常:
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
user.StatusID == 1
);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?你如何在EF 4中进行条件测试?如果线条肯定不分开?
我在Linq to Sql中一次又一次地使用这些条件测试; 为什么这在EF 4中不起作用真的很奇怪.必须有一些简单的错误,也许在EF 4.0中有一种推荐的替代方法.
谢谢你的帮助,
格雷厄姆
我如何使用ASP.NET MVC UpdateModel执行以下操作?我正在尝试将空间分隔的文本框数据(与新的StackOverflow问题中的TAGS文本框完全相同,如此)读入模型中.
例如.
<input type="Tags" type="text" id="Tags" name="Tags"/>
...
public class Question
{
public string Title { get; set; }
public string Body { get; set; }
public LazyList<string> Tags { get; set; }
}
....
var question = new Question();
this.UpdateModel(question, new [] { "Title", "Body", "Tags" });
Run Code Online (Sandbox Code Playgroud)
Tags属性确实被实例化,但它只包含一个项目,即输入到Tags输入字段的整个数据.如果我想在列表中有一个项目(基于通过空格拆分字符串)..最好的做法是什么来处理这个,好吗?
干杯!
我正在避免在.net arch/n-tier体系结构上编写看起来像另一个线程的东西,但请耐心等待.
在选择用于企业应用程序的体系结构时,我希望与其他人一样,对于采用当今趋势和新兴技术的最佳方法仍然不是100%满意或明确.
我想我正在寻找的方向质量社会舆论和建筑实现您构建利用今天的.NET技术和什么方向最方面你会采取一个企业应用程序时会选择.我最好把这个关于我和我的问题,因为担心这样做太模糊了; 我希望改进我的架构以进行改进,并且非常希望听到你们在我将要编写的技术列表中的想法.
您建议的任何和所有最佳实践和架构模式都是受欢迎的,如果您之前已经为类似类型的设置创建了解决方案,那么您可能遇到或克服的任何陷阱或警告.
这是我最新项目中采用的技术列表,除了WPF之外几乎所有东西都是:)
要考虑的实用程序和其他组件:
我目前在n-Tier拱门中运行.采用基于服务的设计模式,利用请求/响应(不确定它的正式名称)和存储库模式,我的大多数结构都是从Rob Conery的Storefront采用的.
我想我对大多数层级都或多或少感到满意(这真的只是DAL,我有点不安).
在我结束之前,这些是我当前架构面临的真正问题:
如果我在使用LINQ to SQL时应该有一个自定义数据访问层,那么我有一个很大的问号.我应该直接在服务/业务层或存储库方法的DAL中执行LINQ to SQL吗?您是否应该在每个存储库方法调用中创建数据库上下文的新实例(使用using())?或者类构造函数中的一个/通过DI?
在使用LINQ to SQL时,您是否相信我们可以真正使用POCO(普通的旧CLR对象)?我很想看到一些例子,因为我遇到了问题,而且它对WCF的工作特别方便,因为我显然无法通过线路传输L2S对象.
通过在视图中保持视图逻辑,控制器调用服务/业务方法以及模型中的数据访问,您自己创建一个ASP.NET MVC项目非常清楚地显示您应该采用的设计模式,但是您是否会放弃模型'对于大型项目而言,特别是在共享数据访问的地方,您会采取什么方法来获取数据?
感谢您的光临,并希望看到基于架构的示例代码库以及它是如何拆分的.正如我所见,我已经看到了Storefront,我还没有真正通过Oxite,但只是认为这对我和每个人都有好处.
在DAL项目符号点中添加了其他问题./ 15:42 GMT + 10
我正在使用log4net并且在一个类中需要记录到RollingFile appender,但是在另一个类中,我希望登录到事件日志+滚动文件+控制台appender.
什么是最佳做法?我能看到一些示例代码吗?
为了使事情变得更加困难,我使用Castle Windsor Logging Facility和Log4net来解析我的Logger实例.
如果有帮助的话,我在想下面的内容,但不知道这是不是最好的做法,或者如何基于'name'激活特定的记录器仍然使用来自windsor的当前记录器实例:
log4net.config:
...
<logger name="EventLogOnly">
<level value="ALL" />
<appender-ref ref="EventLogAppender" />
</logger>
<logger name="ConsoleEventLog">
<level value="ALL" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="EventLogAppender" />
</logger>
...
Run Code Online (Sandbox Code Playgroud)
城堡windsor容器建造者类:
container.AddFacility("logging.facility",
new LoggingFacility(LoggerImplementation.Log4net, "log4net.config"));
Run Code Online (Sandbox Code Playgroud)
要记录的类:
private ILogger Logger;
public Test(ILogger logger) {
Logger.Info("Can I log under event log only?");
Logger.Info("Now can I log under both?");
}
Run Code Online (Sandbox Code Playgroud)
多谢你们.
阅读本文之后http://www.codinghorror.com/blog/archives/000228.html我更了解编译正则表达式的好处,但是在个人情况下你会考虑强制使用已编译的Reg Ex吗?
例如,我在循环中使用正则表达式并且正则表达式字符串在每次迭代时使用不同的变量,因此我将通过将此正则表达式标记为编译正确来寻求没有改进?
foreach (field field in fields.Where(x => x.condition))
MatchResults = Regex.Match(request.Message, field.RegularExpression);
...
Run Code Online (Sandbox Code Playgroud) .net ×6
c# ×4
asp.net-mvc ×3
linq-to-sql ×2
updatemodel ×2
architecture ×1
asp.net ×1
html-helper ×1
linq ×1
log4net ×1
regex ×1
winrt-xaml ×1