如何将 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();
}
对输入也使用相同的名称 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"/>
}