当模型为IEnumerable <t> </t>时,将参数传递给Html.ActionLink

时间:2014-09-12 11:05:45

标签: .net asp.net-mvc actionlink

我真的希望有人能帮我解决这个我想做的事情。我是MVC的新手,我仍然试图理解它!

我有一个名为Submission的控制器,它传递了公司ID,因此我可以跟踪我们在哪家公司工作。

http://myurl/Submission/Index/1

此视图的代码:

@model IEnumerable<Reports.Models.Submission>

@{
    ViewBag.Title = "Index";
}

<p>@Html.ActionLink("Create New", "Create")</p>

@foreach (var item in Model)
{
    <p>@Html.DisplayFor(modelItem=>item.ContactName) | @Html.ActionLink("Edit", "Edit", new {      id=item.submissionID }) </p>
}

我可以看到我如何将我的提交内容传递给我的&#34;编辑&#34;链接,因为我在模型的循环内。这很好。

我的问题是我无法在我的&#34;创建新的&#34; Actionlink,例如

<p>@Html.ActionLink("Create New", "Create",new {id=Model.[No options appear here!]}</p>

我认为这是因为我的模型在顶部被声明为IENumerable,但是我需要这样来循环我的公司以进行编辑链接。基本上看起来我需要两个版本的模型,但我知道这是不可能的。谁知道我能在这做什么?

3 个答案:

答案 0 :(得分:0)

如果您的代码与您的帖子完全一样,那么Visual Studio和Razor无法解决这个问题。不过你可以。您的代码如下所示:

<p>@Html.ActionLink("Create New", "Create", new {id=Model.[No options appear here!]}</p>

请再次检查您的代码,并证明缺少结束括号)。如果是,那么只需关闭括号就可以恢复智能感知。也就是说,您的代码应如下所示:

<p>@Html.ActionLink("Create New", "Create", new {id=Model.[No options appear here!]})</p>
                                                                                    ^
                                                                 look for this _____|

答案 1 :(得分:0)

我会创建一个ViewModel而不是在你的cshtml上使用IEnumerable作为初学者。

查看模型

using System.Linq;
using System.Collections.Generic;

public class SubmissionVm {
    public IEnumerable<Reports.Models.Submission> submissions { get; set; }
    public int MaxId {
        return submissions.OrderByDescending(s => s.submissionID).FirstOrDefault().submissionID;
    }
}

在你的cshtml上,在你的Create New链接中,你将追踪Model。,但是没有属性可供查看,因为Model是一个IEnumerable。也许你正试图获得下一个id,或者Enumerable中的最高ID?因此,上面的MaxId属性将为您提供IEnumerable中最高的submissionID。然后,您可以修改“创建新”链接。

<p>@Html.ActionLink("Create New", "Create",new {id=Model.MaxId})</p>

在您的控制器上,您可能希望将此数字增加一个,或者从MaxId更改它

答案 2 :(得分:0)

我假设当url/Submission/Index/x x是公司ID时,您希望将其生成为创建链接:url/Submission/Create?CompanyId=x。我建议将模型类更改为类似下面的内容,其中包含CompanyIDSubmissions属性。

public class SubmissionIndexModel
{
    public SubmissionIndexModel()
    {
        this.Submissions = new List<Submission>();
    }

    public int CompanyID { get; set; }
    public List<Submission> Submissions { get; set; }
}

这是您的控制器代码应该是什么样子

public ActionResult Index(int id)
{
    SubmissionIndexModel model = new SubmissionIndexModel();
    model.CompanyID = id;
    model.Submissions = (from n in db.Submissions where n.reportNameID == id select n).ToList();

    return View(model);
}

您的观看代码应如下所示,您可以将Model.CompanyID传递给创建操作链接,并通过Model.Submissions枚举以生成修改链接。

@model SubmissionIndexModel

@{
    ViewBag.Title = "Index";
}

<p>@Html.ActionLink("Create New", "Create", new { CompanyId = Model.CompanyID })</p>

@foreach (var item in Model.Submissions)
{
    <p>@Html.DisplayFor(modelItem => item.ContactName) | @Html.ActionLink("Edit", "Edit", new { id = item.submissionID }) </p>
}