2

这是我的索引视图(Index.cshtml)的相关部分:

    @foreach (var item in Model) {
       <li>
            @Html.ActionLink(item.name, "Index", "Filler", new { cap = item }, null)
       </li>
    }

如您所见,ActionLink 与 Filler Controller 上的 Index 动作相关联,并传入整个项目(模型)——“项目”的类型为“胶囊”。

现在,在我的填充控制器上,在索引操作中:

        public ActionResult Index(capsule cap)
        {
            var fillers = db.fillers.ToList();
            return View(fillers);
        }

Entity Framework自动生成的capsule类是:

namespace CapWorx.Models
{
using System;
using System.Collections.Generic;

public partial class capsule
{
    public capsule()
    {
        this.fillers = new HashSet<filler>();
    }

    public int pk { get; set; }
    public string name { get; set; }

    public virtual ICollection<filler> fillers { get; set; }
}
}

问题是上述索引操作中的“上限”为 NULL。但是,如果我将类型更改为“对象”而不是“胶囊”,我会得到一些奇怪的非空数据,但我不能将对象转换为“胶囊”。有谁知道为什么这是NULL?

谢谢,

麦克风

4

4 回答 4

3

你通常只需要传递id给动作。例如,您是否可以重构您的代码,以便它可以接收 a capsuleId,从 db 获取胶囊并进行所需的任何处理。将整个对象添加到路由值ActionLink没有任何意义。查看正在生成的链接。它可能就像...?cap=Namespace.Capsule对象会被ToString编辑一样

于 2013-01-12T22:38:52.987 回答
0

第一个问题是在 MVC 中您无法绑定到接口 ( ICollection)。您需要将其更改为 List - List<filler>。您将面临的第二个问题是列表/数组需要以数组表示法表示才能正确发布,例如name="books[0].book_id". 即使 MVC 做了很多魔法,链接中的模型最终仍然必须表示为查询字符串。

根据您要执行的操作,您最好将模型表示为 JSON 对象并使用 .ajax() 发布。

有关其他想法,请参阅此 SO 帖子 -需要帮助将 Set 与 Spring MVC 表单绑定

于 2013-01-12T22:33:44.333 回答
-1

@Html.ActionLink just generates an anchor element (<a href="...">...</a>), so it makes no sense to attempt to bind a complete object to the routeValues parameter. As @manojlds says, it make much more sense to just pass the relevent key value, since you'll be performing the lookup then anyway (remember, the web is "stateless").

于 2013-01-12T22:45:01.037 回答
-1

我不完全确定这为什么会起作用(我认为您正在取消 html 属性),但请尝试删除操作链接的“null”部分。

或者,创建模型的控制器是错误的。

再说一次,不要为此杀了我。

于 2013-01-12T21:45:12.137 回答