我想将文本框值作为第二个参数发送给正在使用的控制器。 第一个参数是id,第二个参数是myval。 这是查看代码:
@model System.ValueTuple<System.Data.DataTable,websitetemplate.Models.ChartQuantity>
<div class="container">
<div class="row">
<div class="col-md-12 nopadding">
<div class="col-md-4 col-sm-4">
<div class="section-2-box-left wow fadeInLeft">
@if (Model.Item1.Rows.Count > 0)
{
string myimage = Model.Item1.Rows[0][4].ToString();
<div style="margin-bottom:10px; "><figure><img src="~/image/@myimage" /></figure></div>
<div style="margin-top:2px;">
<p>Title:@Model.Item1.Rows[0][1]</p>
<p>Description:@Model.Item1.Rows[0][2]</p>
<p>Price: $ @Model.Item1.Rows[0][3]</p>
<label>Quantity:</label>
@Html.TextBoxFor(model=>model.Item2.quantity, new { Type = "Number" })<br />
</div>
string val = Model.Item2.quantity.ToString();
<a href="@Url.Action("chart", "Chart", new { id = Model.Item1.Rows[0][0], myval=Model.Item2.quantity })" class="btn btn-primary">Add to chart</a>
}
else
{
<div>
<figure><img src="~/image/alt.jpg" /></figure>
</div>
}
</div>
</div>
这是控制者:
public ActionResult chart(int id = 0, int myval = 0)
{
string val1="",val2="", val3 ="",val5="";
int v=0;
using (SqlConnection conn = new SqlConnection(connection))
{
conn.Open();
SqlDataAdapter da = new SqlDataAdapter("Select * from [dbo].[Admin] Where ID='" + id + "'", conn);
}
此处在视图中model.Item2.quantity未在操作链接中正确传递,因为未在控制器中显示。如果有人知道,请帮助我。谢谢。
答案 0 :(得分:1)
当剃刀视图引擎在您的视图中执行代码时,服务器上将执行Url.Action
帮助方法。该结果(HTML)将发送到浏览器,然后浏览器将其呈现。用户可以编辑输入元素的值,并且无法动态更改已经渲染的链接标记的href
值!
您有2个选择。
1)进行表单提交。您可以将输入元素包装在表单标签中,然后提交表单。提交表单后,它还将发送当前输入元素的值。确保您的输入元素name
属性值与您的操作方法参数名称匹配。
<form action="chart" method="get">
<input type="number" value="@Model.Item2.quantity" name="myval" />
<input type="hidden" name="id" value="@Model.Item1.Rows[0][0]" />
<button type="submit" class="btn">Add to chart</button>
</form>
2)使用JavaScript 。在这种方法中,您将使用JavaScript拦截click事件,停止正常行为(使用preventDefault
方法),读取输入元素值并使用所需的值构建URL并导航至该URl通过将新的URL设置为window.location.href
。