将控制值发布到控制器
Posted
技术标签:
【中文标题】将控制值发布到控制器【英文标题】:Post control values to controller 【发布时间】:2012-07-07 20:37:36 【问题描述】:我的视图中有一个开始日期搜索框。
这 POST 到我的控制器,然后在所选日期之间搜索可用房间。然后结果会再次列在视图中。
我习惯了 WebForms,您可以在其中 PostBack 并获取任何控制数据 - 但是在 MVC 中您不能这样做。
显示结果后,如何将已选择的 RoomId POST 回控制器:
@html.ActionLink("Book Room","Book", new id=item.RoomId )
...以及来自 TextBoxes 的 tbFrom 和 tbTo 日期?
下面是我的观点。
感谢您的帮助,
标记
@model IEnumerable<ttp.Models.Room>
@
ViewBag.Title = "Avail";
<h2>Avail</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm())
<p>
Availability between @Html.TextBox( "dteFrom" , String.Format( "0:dd/MM/yyyy", DateTime.Now) , new @class = "datepicker span2" )
and @Html.TextBox( "dteTo" , String.Format( "0:dd/MM/yyyy", DateTime.Now) , new @class = "datepicker span2" )
<input type="submit" value="Search" /></p>
<table class="table table-striped table-bordered table-condensed" style="width:90%" id="indexTable" >
<tr>
<th>
@Html.DisplayNameFor(model => model.RoomName)
</th>
</tr>
@foreach (var item in Model)
<tr>
<td>
@Html.DisplayFor(modelItem => item.RoomName)
</td>
...
...
<td>
@Html.ActionLink("Book Room","Book", new id=item.RoomId )
</td>
</tr>
</table>
【问题讨论】:
【参考方案1】:使您的视图具有强类型...并且要了解 mvc.net 中的强类型视图是什么,这里有几个链接
http://www.howmvcworks.net/OnViews/BuildingAStronglyTypedView
What is strongly-typed View in ASP.NET MVC
http://blog.stevensanderson.com/2008/02/21/aspnet-mvc-making-strongly-typed-viewpages-more-easily/
如果您在应用程序中设置了默认路由,那么在您的POST
操作结果中,您可以获得id
作为路由值,例如
[HttpPost]
public ActionResult POSTACTION(int id)
//here you will get the room id
但从代码中我看到的是您没有发布表单,在这种情况下,actionlinks 会发出 GET
请求,从操作结果中删除 [HttpPost]
操作过滤器...
编辑
可能我只是误解了这个问题......在你目前的情况下,如果ajax
是一个选项,你可以做这样的事情
为您的操作链接分配一个类,例如
@Html.ActionLink("Book Room","Book", new id=item.RoomId ,new@class="roomclass",id=item.RoomId)
现在为它附加一个点击事件处理程序
$(function()
$(".roomclass").on("click",function(e)
e.preventDefault(); //prevent the default behaviour of the link
var $roomid = $(this).attr("id");//get the room id here
//now append the room id using hidden field to the form and post this form
//i will assume that you have only one form on the page
$("<input/>",type:'hidden',name="RoomId",value:$roomid).appendTo("form");
$("form").submit();
);
);
指定表单将发布到的操作名称和控制器
@using (Html.BeginForm("MyAction","ControllerName",FormMethod.POST))...
在您的控制器中,您将拥有类似
的内容[HttpPost]
public ActionResult MyAction(int RoomId,DateTime? dteFrom ,DateTime? dteTo )
//you will get the form values here along with the room id
// i am not sure about the type `DateTime?` parameteres if this doesn't work try using string dteFrom and string dteTo
【讨论】:
嗨@John - 谢谢 - 我可以得到 ID 没问题 - 这就是我还包括我不确定的 dteFrom 和 dteTo 值的方式。我已经阅读了您提供的链接,但我仍然不清楚当我列出了许多具有唯一 ID 的房间时,如何发布/获取 ID 并包含文本框中的起始日期和结束日期.再次感谢,马克 嗨@John - 我还没有让它工作,但可以看到你指向我的地方,并且 80% 理解它 - 我会接受你的建议,做更多搜索,我敢肯定我会在接下来的一两天内让它工作。非常感谢您花时间让我走上正轨,我真的很感激。干杯,马克以上是关于将控制值发布到控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HttpWebRequest 将数据发布到 MVC 控制器?