小编Rob*_*Rob的帖子

ASP.Net MVC回发和模型

这主要是对本期评论的后续评论,但我没有足够的声誉评论......

ASP.Net MVC将标签值回发给控制器

假设我有一个简单的模型:

public class SimpleClass
{
    public String Label { get; set; }
    public String FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

标签是基于用户/客户端更改的,因此它不能是DataAttribute.如果发布回发处理问题时,我们需要重绘整个页面.这是前一篇文章的关键问题.接受的解决方案是这样做:

@Html.DisplayTextFor(model => model.Label)
@Html.HiddenFor(model => model.Label)
@Html.EditorFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为它有效.但是我们的模型更加复杂和广泛.这种方法会导致大量的隐藏字段,这似乎是一个非常肮脏的解决方案.

这让我想到JP的评论:

ASP.Net MVC将标签值回发给控制器

解决方案是重新加载模型.但它不仅仅是重新加载,它也是一种合并,因为您希望保留任何客户端数据更改.

default: SimpleClass { Label="TheLabel", FirstName="Rob"}
postedback: SimpleClass { Label="", FirstName="Steve" }
we want: SimpleClass { Label="TheLabel", "FirstName="Steve" }
Run Code Online (Sandbox Code Playgroud)

我的问题是MVC有一个很好的方法来知道哪些字段被回发,所以它正确合并?我们只需要合并回传字段而不是空白属性.

或者只是更好地整理回发而不是表单提交?这样可以避免提交时出现所有模型重新加载问题.

更新

为了给予Pablo信用,我接受了他的解决方案.要查看我的解决方案的简单示例,请在下面的答案中查看Robert Harvey的评论:

ASP.Net MVC回发和模型

c# asp.net-mvc model-binding

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

Linq或Tsql'Pivot'

我确信这在其他地方有所涉及,但我遇到了一些问题,想出一个优雅的解决方案.

ID  C     D
1   Apple Red
1   Pear  Orange
2   Apple Red 
2   Pear  Orange
Run Code Online (Sandbox Code Playgroud)

我想要最终得到的是:

ID  | Benefit | Value
1   | C       | Apple
1   | C       | Pear
2   | C       | Apple
2   | C       | Pear
1   | D       | Red
1   | D       | Orange
2   | D       | Red
2   | D       | Orange
Run Code Online (Sandbox Code Playgroud)

我可以在Linq中扫描每一列并添加到列表中.

public class SampleRow
{
    public Int32 Id { get; set; }
    public String A { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server pivot

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

标签 统计

c# ×2

asp.net-mvc ×1

linq ×1

model-binding ×1

pivot ×1

sql-server ×1