将从视图中的linq语句检索到的值传递给其控制器

本文关键字:值传 控制器 语句 视图 linq 检索 | 更新日期: 2023-09-27 18:24:29

我有一个包含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"不在该表中。我不想创建一个模型,只为一个额外的字段,除非迫不得已。

我该怎么做?

将从视图中的linq语句检索到的值传递给其控制器

我可能误解了您的问题,但看起来您正试图在视图中获取一个值,并使该值可用于控制器上运行的代码。视图有一个通过ViewContext.Controller指向控制器的句柄,您可以将其转换为控制器的类型,然后与之交互。例如,可以将属性添加到控制器中,然后从视图中进行设置。我不知道你为什么要这么做,因为控制器的工作通常在视图渲染时完成,但如果你想追求它,这是一个选项。

您应该创建一个ViewModel,并使您的视图基于ViewModel强类型化。你的ViewModel可以是这样的:

public class MyViewModel
{
  public MyModel MyModel { get; set; }
  public int Id { get; set; }
}

然后,在您看来,您将拥有:

<%: Html.HiddenFor(model => model.Id) %>