1

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

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();
     }
4

3 回答 3

0

现在我正在使用

索引.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”中的值仍然为空

于 2013-09-18T05:56:18.753 回答
0

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

于 2013-09-18T05:34:36.657 回答
0

第一的。控制器将数据传递给视图。没有其他办法。这是因为 Web 应用程序的基本性质。
基本上:请求 -> 控制器 -> 选择并渲染视图。
视图本身在客户端浏览器中不是一个已知的概念。那是简单的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"/>
}
于 2013-09-18T06:27:34.480 回答