我的视图采用了类型
的模型public class Product
{
public string PartNumber { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public string ImageUrl { get; set; }
public List<Document> Documents { get; set; }
public Product()
{
Documents = new List<Document>();
}
}
单击以下链接时,我想调用控制器并以某种方式将List作为参数传递给控制器
<a href="@Url.Action("Browse", "Home", new { docList= Model.Douments})" data-role="button" data-icon="search" class="my-btn">Available Documents</a>
public ActionResult Browse(List<Documentr> docList)
{}
如果我不必在查询字符串上传递List,我不想这样做。
寻找帮助修复我的代码以实现此目的
答案 0 :(得分:0)
您应该使用ViewModel传递数据(最简单的方法)。
或者,您可以使用自定义动作过滤器或自定义模型绑定器as described here进行艰难的操作。
您尝试的方法不起作用的原因是,通过默认的模型绑定器,MVC无法正确处理将List作为参数传递。
<强>更新强>
由于看到您更新帖子时列表是更大的Product类的一部分,我想知道为什么您不只是通过id引用目标操作的产品? (我不知道您的实体Key的名称是什么,但我将假设它是“Id
”
您的链接将更改为以下内容:
<a href="@Url.Action("DocumentList", "Home", new { id = Model.Id})" data-role="button" data-icon="search" class="my-btn">Available Documents</a>
你会有你的行动:
public ActionResult DocumentList ( int id )
{
var product = db.Product.Find(Id);
return View(product.List)
}
答案 1 :(得分:0)
我认为你过于复杂了。我不明白你为什么要将 readonly 数据发布到另一个控制器动作。这种方法的另一个问题是,在点击链接时,它有可能过时(轻微机会,但仍然可能)。此外,如果您的初始视图实际上没有显示任何文档,那么我会将其从模型中删除,因为它不是必需的,例如。
public class ProductViewModel
{
public int Id { get; set; }
public string PartNumber { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public string ImageUrl { get; set; }
}
public ActionResult Product(int id)
{
var model = new ProductViewModel();
... // populate view model
return new View(model);
}
然后在您的视图中,链接到您的产品以进行浏览
@Html.ActionLink("Browse Documents", "Home", "Documents", new { id = Model.Id })
然后让您的Documents
操作再次拉出产品,这次发送文档
public ActionResult Browse(int productId)
{
var product = ... // get product by id
return View(product.Documents);
}
一般经验法则 - 仅提供所需内容