将id从视图传递给控制器

时间:2014-12-12 21:54:23

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

其实我是MVC的初学者。简单的问题:

例如,我有类别页面的ViewModel:

public class CategoryViewModel
{
    public int ProductId {get;set;}
    public int CategoryId {get;set;}
    public string ProductName {get;set;}
    public string CategoryName {get;set;}
}

在控制器中,我只是将CategoryIdCategoryName传递给视图:

public ActionResult Index()
{
    CategoryViewModel categoryViewModel = new CategoryViewModel();
    categoryViewModel.CategoryId = catId; \\Get from DB
    categoryViewModel.CategoryName = catName; \\Get from DB

    return View("Category", categoryViewModel);
}

然后在视图中我需要将产品添加到此类别:

<form action=@Url.Action("AddProduct", "Category") method="POST" enctype = "multipart/form-data">
    <textarea name ="ProductName"></textarea>
    <input type="submit" value="Add"/>
</form>

在AddProduct的控制器中:

[HttPost]
public ActionResult AddPost(CategoryViewModel categoryViewModel)
{
    var productName = categoryViewModel.ProductName;
    var categoryId = ?
    ProductRepository.AddProductToCategory(productName, categoryId);

    return new EmptyResult();
}

问题:如何获得CategoryId?或许还有另一种方法?

2 个答案:

答案 0 :(得分:8)

更改您的视图以包含CategoryId属性

的控件
@model CategoryViewModel
@using(Html.BeginForm("AddProduct", "Category"))
{
  @Html.HiddenFor(m => m.CategoryId)
  @Html.TextAreaFor(m => m.ProductName)
  <input type="submit" value="Add" />
}

注意,请始终使用强类型html帮助程序来生成html。

答案 1 :(得分:2)

Stephen Muecke

您也可以从(表单自身)和您想要的其他属性传递id,但您必须在输入操作方法中定义。

@model CategoryViewModel
@using (Html.BeginForm("AddProduct", "Category", new { id = Model.CategoryId }, FormMethod.Post, new { }))
  {
        @Html.TextAreaFor(m => m.ProductName)
        <input type="submit" value="Add" />
  }

行动方法:

[HttPost]
public ActionResult AddPost(CategoryViewModel categoryViewModel,int id)
{
    var productName = categoryViewModel.ProductName;
    var categoryId = id
    ProductRepository.AddProductToCategory(productName, categoryId);

    return new EmptyResult();
}

我希望这对你有所帮助。