如何将Html元素的text / Value从视图传递给控制器

时间:2013-09-18 05:32:29

标签: c# asp.net-mvc-4

我想访问控制器中按钮的值,然后将其传递给视图。        但是从视图传递到控制器的“str”的值为null。

Index.chtml

@{
     var str = "Shoes";
}

<a href="~/Home/Products_By_Category/@str" target="_parent">
                <input type="button" value="Shoes" class="btn"/>
      </a>

/////////////////////////

<pre lang="c#">

     public ActionResult Products_By_Category(string s)
     {
           ViewBag.category = s;
           return View();
     }

3 个答案:

答案 0 :(得分:0)

您的输入也具有相同的名称。 在客户端使用ViewBag.category。由于ViewBag是一个动态实体。 您是否正在使用表单提交,在这种情况下,MVC将自动为您填写输入值。

答案 1 :(得分:0)

现在我正在使用

Index.cshtml

    @{
      var str="Shoes";
}

<form action="~/Home/Products_By_Category/@str" method="post">

      <input type="submit" value="Shoes" class="btn"/>

</form>

/////////////

public ActionResult Products_By_Category(string s)
{
       var context = new Shoe_StoreDBEntities();
       var q = from p in context.Products
            join c in context.Categories on p.CategoryId equals c.Id
            where c.Name.Equals(s)
            select new { p, c };
}

但“s”中的值仍为空

答案 2 :(得分:0)

首先。控制器将数据传递给视图。没有别的办法了。这是因为Web应用程序的基本特性 基本上:请求 - &gt;控制器 - &gt;选择并渲染视图 视图本身不是客户端浏览器中的已知概念。这很简单的html / css / js 您的观点应如下所示:

@{
  var str = "Shoes";
}

@using (Html.BeginForm("Products_By_Category"))
{
  <input type="submit" name="s" id="s" value="@(str)"/>
}

有些注意事项:
1)如果在html元素属性中使用变量,则必须将其括起来 2)你应该尽可能使用内置的html助手(beginform)
3)此示例仅在您单击提交按钮以回发数据时才有效。如果有其他提交按钮或从js启动回发,则按钮数据不包含在formdata中。您应该使用隐藏字段来存储str值,而不是依赖于按钮的标签:

@{
  var str = "Shoes";
}

@using (Html.BeginForm("Products_By_Category"))
{
  <input type="hidden" id="s" name="s" value="@(str)"/>
  <input type="submit" value="Do postback"/>
}