您可以在不使用ajax的情况下将参数从视图发送到控制器吗?
我的观点
@Html.LabelFor(model => model.FromDate)
@Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" })
@Html.LabelFor(model => model.ToDate)
@Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" })
<input id="Button1" type="button" value="Ok" />
我的控制器
public ActionResult GetDates(string FromDate, string ToDate)
{
DateTime fromdt = Convert.ToDateTime(FromDate);
DateTime todt = Convert.ToDateTime(ToDate);
SqlConnection con = new SqlConnection(@"Data Source=192.168.0.73\SQLEXPRESS,14330;Initial Catalog=WafeERP_NEW;User ID=sa;Password=wafewin;");
DataTable dt = new DataTable();
try
{
con.Open();
SqlCommand cmd = new SqlCommand("Select * from View_VisitorsForm where VisitingDate >='" + fromdt +"'and VisitingDate <= '" + todt +"'", con);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
}
catch (Exception ex)
{
throw;
}
ReportClass rc = new ReportClass();
rc.FileName = Server.MapPath("/Reports/rpt_DailyCustomerVisitSummary.rpt");
rc.Load();
rc.SetDataSource(dt);
Stream stream = rc.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return File(stream, "application/pdf");
}
嗨我在视图中有两个字段,如果我选择From Date和To Date并单击ok按钮,它需要将这两个日期传递给此处的控制器
public ActionResult GetDates(string FromDate, string ToDate )
有可能吗?使用ajax是可能的,但我不想要那样。我想在不使用ajax的情况下将这些参数传递给控制器。请任何人告诉我解决方案。
提前谢谢..
答案 0 :(得分:1)
设置表单,您应该能够将参数传递给控制器。
@Using(Html.BeginForm()){
@Html.LabelFor(model => model.FromDate)
@Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" })
@Html.LabelFor(model => model.ToDate)
@Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" })
<input id="Button1" type="button" value="Ok" />
}
此外,由于您正在使用模型,因此您可以将模型传递回控制器。还要确保设置[HttpPost]数据注释以表示它是用于发布数据。
[HttpPost]
public ActionResult GetDates(YourModel yourModel)
{
var from = yourModel.FromDate;
var to = yourModel.ToDate;
}
答案 1 :(得分:0)
您应该考虑创建一个<form>
来包装您的内容,并使用传统的表单提交将其发布到服务器。这通常是处理此类行为的最常见方式。
因此,您只需要使用指向特定URL的简单<form>
元素将视图中的内容包装起来(在这种情况下,使用Url.Action()
方法解析:
<form action='@Url.Action("GetDates","YourController")'>
@Html.LabelFor(model => model.FromDate)
@Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" })
@Html.LabelFor(model => model.ToDate)
@Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" })
<input id="Button1" type="submit" value="Ok" />
</form>
由于您使用的是MVC,您也可以考虑使用Html.BeginForm()
帮助程序,这基本上会做同样的事情。
然后,只需确保您的Controller Action使用[HttpPost]
属性进行修饰,以便它实际上可以接受POST
个请求:
[HttpPost]
public ActionResult GetDates(string FromDate, string ToDate)
{
// Omitted for brevity
}
此外,由于您已经将View绑定到模型,因此您实际上可以更改GetDates()
方法的参数以期望模型的实例(将由.NET的模型填充)绑定):
[HttpPost]
public ActionResult GetDates(YourModel model)
{
// Omitted for brevity (you can access your properties using
// Model.FromDate and Model.ToDate respectively here
}
答案 2 :(得分:0)
使用FormExtensions.BeginForm
方法之一。在最简单的情况下:
@using (Html.BeginForm("GetDates", "YourController"))
{
@Html.LabelFor(model => model.FromDate)
@Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" })
@Html.LabelFor(model => model.ToDate)
@Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" })
<input type="submit" value="Ok" />
}
BeginForm方法呈现一个将由控制器操作方法处理的表单。
您可以在using块中使用此方法。在这种情况下,该方法会在使用块的末尾呈现结束</form>
标记。
您可以传递整个模型对象而不是separateProperties:
[HttpPost]
public ActionResult GetDates(YourModelClass model)
{
...
}