如何将 Html 元素的文本/值从视图传递到控制器

本文关键字:视图 控制器 Html 元素 文本 | 更新日期: 2023-09-27 18:31:38

我想访问控制器中按钮的值,然后将其传递给视图。 但是从视图传递到控制器的"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();
     }

如何将 Html 元素的文本/值从视图传递到控制器

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

现在我正在使用

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"中的值仍然为空

第一。控制器将数据传递到视图。没有其他办法。这是因为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 启动回发,则按钮数据不会包含在表单数据中。您应该使用隐藏字段来存储 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"/>
}