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