我有一个包含c#和linq的视图(不理想,但我必须使用它!):
protected void Page_Load(object sender, EventArgs e)
{
.
.
var qry = (from p in db.EntityObject
where something == something_else
select new
{
<fields>
}).FirstOrDefault();
.
.
}
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
.
.
我需要将通过视图中的linq语句检索的值传递给我的控制器。我试过这个:
var qry = (from <entity objects>
select new
{
id,
// fields
}).FirstOrDefault();
RouteData.Values.Add("id", qry.id);
然后我尝试将其作为值传递给隐藏的输入类型:
<input type="hidden" value="<%Int32.Parse(RouteData.Values["id"].ToString())"/>
但是,当我使用Chrome的工具查看输入元素时,'value'为空。我不知道如何通过从linq中恢复的字段来查看它在控制器中的相应操作。
我的视图是基于实体框架中的表强类型的,我想要从视图到控制器传递的'id'不在该表中。除非必须,否则我不想创建一个模型,仅用于一个额外的字段。
我该怎么做?
答案 0 :(得分:1)
我可能误解了您的问题,但看起来您正试图在视图中获取值,并使该值可用于控制器中运行的代码 。该视图通过ViewContext.Controller
具有控制器的句柄,您可以将其转换为控制器的类型然后进行交互。例如,您可以向控制器添加属性,然后从视图中设置它。我不确定你为什么这样做,因为控制器的工作通常在视图渲染时完成,但如果你想要追求它,它是一个选项。
答案 1 :(得分:0)
您应该创建一个ViewModel,并根据ViewModel强化您的View类型。您的ViewModel可以是这样的:
public class MyViewModel
{
public MyModel MyModel { get; set; }
public int Id { get; set; }
}
然后,在您的视图中,您将拥有:
<%: Html.HiddenFor(model => model.Id) %>