使用MVC3和razor进入一个非常奇怪的问题.
我正在组合的应用程序显示了一系列面试问题.我有一个问题的观点(问题的内容来自viewmodel).所以在我从一个问题回复后,我可能会返回相同的问题视图(但使用不同的viewmodel实例).
在viewmodel中我有一个很长的属性,如下所示:
public long QuestionID { get; set; }
Run Code Online (Sandbox Code Playgroud)
我试图使用隐藏的输入字段来存储视图中的值:
@Html.HiddenFor(m => m.QuestionID)
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我从问题到问题时,隐藏字段在最终生成的html中没有变化.在所有进一步的问题中,它仍然是第一个questionID的值.所有其他内容都在变化,我还有一些其他隐藏的字段正常工作.我已在生成模型的控制器中验证了正确的值.我可以在剃刀文件中设置断点,我可以看到模型与正确的QuestionID一样.我尝试使用@ Html.TextBoxFor也有同样的问题.当我手动创建一个隐藏的字段,如下所示,它工作正常,这是真正困扰我的.
<input type="hidden" id="QuestionID" name="QuestionID" value="@Model.QuestionID" />
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
我正在尝试实现一个像文件夹树一样工作的数据网格(即每行代表一个文件夹,详细信息视图是另一个显示文件夹中文件的数据网格).为了简单起见,我试图减少我的代码,所以可能会有错误,但这是我的基本XAML布局:
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">
<my:DataGrid.RowDetailsTemplate>
<DataTemplate>
<my:DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGrid}}, Path=SelectedItem.Files}" AutoGenerateColumns="False" HeadersVisibility="None">
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding Path=FileName}" />
<my:DataGridTextColumn Binding="{Binding Path=FSize}" />
</my:DataGrid.Columns>
</my:DataGrid>
</DataTemplate>
</my:DataGrid.RowDetailsTemplate>
<my:DataGrid.Columns>
<my:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="16">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click_1">
<Image Source="resources/+.ico" />
</Button>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
<my:DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
</my:DataGrid.Columns>
</my:DataGrid>
Run Code Online (Sandbox Code Playgroud)
我正在尝试让按钮展开详细信息行,但我不确定如何引用该行:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// how do I reference a row here?
DataGridRow row = ?
// so I can do this:
if (row.DetailsVisibility …Run Code Online (Sandbox Code Playgroud) 这一点代码将帮助我描述我的问题:
public class Car
{
...
}
public class CarQueue : ObservableCollection<Car>
{
public IEnumerable Brands
{
get { return (from Car c in this.Items select c.Brand).Distinct(); }
}
}
Run Code Online (Sandbox Code Playgroud)
好了,我有一个绑定到DataGrid的CarQueue类的实例.当我将一个Car对象添加到队列时,datagrid会自行更新,但我也有一个绑定到'Brands'属性的列表框,它不会更新.这是一个简单的代码序列来解释:
CarQueue cq = new CarQueue();
DataGrid1.ItemsSource = cq;
ListBox1.ItemsSource = cq.Brands; // all above done during window load
...
Car c;
cq.Add(c); // datagrid updates, but not listbox
Run Code Online (Sandbox Code Playgroud)
列表框是否未更新,因为它绑定到具有动态LINQ查询的属性?
我尝试的另一件事是继承INotifyPropertyChanged并向CollectionChanged事件添加一个新的事件处理程序(在我的CarQueue构造函数中):
this.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(CarQueue_CollectionChanged);
Run Code Online (Sandbox Code Playgroud)
然后在事件处理程序中:
void CarQueue_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
PropertyChanged(this, new PropertyChangedEventArgs("Brands"));
}
Run Code Online (Sandbox Code Playgroud)
这也不起作用.那么有谁知道问题是什么?谢谢
让我们说我有一些代码:
ExampleDomainContext ctx = new ExampleDomainContext();
var query = from p in ctx.GetPeopleQuery()
where p.Id > 2
select p;
ctx.Load<Person>(query).Completed += (s, e) =>
{
// do some stuff
};
Run Code Online (Sandbox Code Playgroud)
这是在客户端上完成的,来自RIA服务的GetPeopleQuery()调用返回people表中的所有人.
我的问题是查询(Id> 2的人)是否被转换到服务器并运行或服务器是否将所有人返回到客户端然后进行过滤?
我有一个简单的用户控件,它围绕AutoCompleteBox包装一些逻辑.这个问题可以应用于任何ItemsControl控件,如下拉列表或列表框.
<UserControl>
<Grid Background="White">
<sdk:AutoCompleteBox Name="myACB" ItemsSource="{Binding myData}" />
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
我想SelectedItem在使用控件的父级中公开AutoCompleteBox 的属性.我的用户控件使用视图模型作为其数据上下文.否则,我想我可以将SelectedItem绑定到用户控件的依赖项属性.
当子自动完成框选择项目发生更改时,我需要能够检测父项.我怎么能这样做?
wpf ×3
.net ×2
c# ×2
silverlight ×2
.net-3.5 ×1
asp.net-mvc ×1
datagrid ×1
linq ×1
razor ×1
vb.net ×1