将View中的HiddenFor ID传递给另一个PartialView的ActionResult

时间:2016-11-16 08:10:42

标签: asp.net-mvc linq

我认为我的头衔有点令人困惑,让我解释一下:

我有IndexView,其中显示公司的所有工作,我正在尝试添加PartialView以及相应的图片。

我提交作业时,我不想在JobTable上保存图像。我希望图像是独立的,仅由UserID链接。在页面详细信息中,我在int? ID标题中有ActionResult,我提出了两个LINQ个查询,首先选择UserID int? ID,在第二个查询中从第一个查询中选择带有UserID的ImageID,所以我尝试做同样的事情,但是我在URL中没有ID,因为我显示了一个列表。

由于这是一个列表,我试图从foreach中的每个@Html.HiddenFor(model => item.ID)获取值,但我无法将其传递回我的ActionResult(PartialView而不是索引),I试过ViewBagSessions每次都是空的。我给了nameValue(大写和小写)@但没有。

这里代码:

    public ActionResult ImgPanel(Job job, int? ID) 
    {
        var JobUserID = (from j in db.Jobs
                        where j.ID == ID /*Here should be the ID from the View of each job object*/
                        select j.UserID).FirstOrDefault();

        var img = (from j in db.Images
                    where j.UserID == JobUserID
                    select j).ToList();

        return View(img);          

    }

在此状态下,ImgPanel的ActionResult返回一个Image,但只返回第一个(在所有Jobs中相同的Image),第二次我的断点告诉我只对所有内容都为null。

查看代码:

@foreach (var item in Model)
{      
    @Html.HiddenFor(model => item.ID) /*I removed all tries with name Value Viewbags etc*/
    @Html.Action("ImgPanel", "Jobs") /*Here I call the PartialView ImgPanel*/
    <div class="row">
        <div class="col-sm-6 col-md-4">
            <div class="thumbnail">
                <h3>@Html.DisplayFor(modelItem => item.ApplicationUsers.CompName)</h3>
                <div class="caption">
                    <h4>@Html.DisplayFor(modelItem => item.Name)</h4>                   
                    <h5><strong>Days Left: </strong>@Convert.ToInt32((item.DateExp - DateTime.Now).TotalDays)</h5>
                    <p>
                        <a href="@Url.Action("Details", "Jobs", new { Id = item.ID})" class="btn btn-info" role="button">Details</a>
                        <a href="#" class="btn btn-success" role="button">Bookmark</a>
                        <a href="#" class="btn btn-danger" role="button">Hide</a>
                    </p>
                </div>
            </div>
        </div>
    </div>
}

1 个答案:

答案 0 :(得分:1)

尝试传入包含您ID的viewmodel。

在您看来:

@Html.Action("ImgPanel", "Jobs", new MyViewModel() { ItemId = item.ID })

在您的控制器中:

public ActionResult ImgPanel(MyViewModel viewmodel) 
{
    var JobUserID = (from j in db.Jobs
                    where j.ID == viewmodel.ItemId /*Here you use the ID stored in the viewmodel*/
                    select j.UserID).FirstOrDefault();

    var img = (from j in db.Images
                where j.UserID == JobUserID
                select j).ToList();

    return View(img);          

}

希望有所帮助!