Asp.net mvc 3 将输入文本从视图传递到控制器
我知道有很多这样的问题,但我真的无法得到答案的解释。。。这是我的看法Asp.net mvc 3 将输入文本从视图传递到控制器,asp.net-mvc-3,view,controller,Asp.net Mvc 3,View,Controller,我知道有很多这样的问题,但我真的无法得到答案的解释。。。这是我的看法 <script type="text/javascript" language="javascript"> $(function () { $(".datepicker").datepicker({ onSelect: function (dateText, inst) { }, altField: ".alternate" }); }); </script> @mo
<script type="text/javascript" language="javascript">
$(function () {
$(".datepicker").datepicker({ onSelect: function (dateText, inst) { },
altField: ".alternate"
});
});
</script>
@model IEnumerable<CormanReservation.Models.Reservation>
@{
ViewBag.Title = "Index";
}
<h5>
Select a date and see reservations...</h5>
<div>
<div class="datepicker">
</div>
<input name="dateInput" type="text" class="alternate" />
</div>
我试图在我的主页中列出用户在我的日历中选择的日期在我的主页中所做的预订 我在您的视图中没有看到表单标记……或者您没有显示整个视图?很难说。。但是要发布到控制器,您应该通过ajax调用将值发送到控制器,或者发布模型。在您的例子中,您的模型是一个
IEnumerable
,您的输入是一个日期选择器,看起来它并没有绑定到您的ViewModel。您在什么时候将日期发回服务器?您是否有一个带有提交按钮的表单,或者您是否有一个没有显示的ajax调用
下面是一个Ajax请求的示例,可以调用它来传递日期
$(function () {
$(".datepicker").onselect(function{
searchByDate();
})
});
});
function searchbyDate() {
var myDate = document.getElementById("myDatePicker");
$.ajax({
url: "/Home/Search/",
dataType: "json",
cache: false,
type: 'POST',
data: { dateInput: myDate.value },
success: function (result) {
if(result.Success) {
// do something with result.Data which is your list of returned records
}
}
});
}
您的datepicker控件需要引用它
<input id="myDatePicker" name="dateInput" type="text" class="alternate" />
更新
如果您想将其作为标准发布,在其中发布数据并返回视图,则需要进行类似的更改
创建视图模型
public class ReservationSearchViewModel {
public List<Reservation> Reservations { get; set; }
public DateTime SelectedDate { get; set; }
}
公共类ReservationSearchViewModel{
公共列表保留{get;set;}
公共日期时间SelectedDate{get;set;}
}
修改控制器操作以最初加载页面,然后能够发布数据并返回包含数据的视图
public ActionResult Index() {
var model = new ReservationSearchViewModel();
model.reservations = new List<Reservation>();
return View(model);
}
[HttpPost]
public ActionResult Index(ReservationSearchViewModel model) {
if(ModelState.IsValid)
var reservations = db.Reservations.Where(r => r.Date = model.SelectedDate).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date);
}
return View(model)
}
public ActionResult Index(){
var model=新的ReservationSearchViewModel();
model.reservations=新列表();
返回视图(模型);
}
[HttpPost]
公共操作结果索引(ReservationSearchViewModel模型){
if(ModelState.IsValid)
var reservations=db.reservations.Where(r=>r.Date=model.SelectedDate)。Include(r=>r.Employee)。Include(r=>r.Room)。OrderByDescending(r=>r.Date);
}
返回视图(模型)
}
修改视图,以便有一个表单可以发布到索引HttpPost操作中
@model CormanReservation.Models.ReservationSearchViewModel
<h5>Select a date and see reservations...</h5>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.EditorFor(model => model.SelectedDate)
@Html.EditorFor(model => model.Reservations) // this may need to change to a table or grid to accomodate your data
<input type="submit" value="Search" />
}
@model CormanReservation.Models.ReservationSearchViewModel
选择日期并查看预订。。。
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
@EditorFor(model=>model.SelectedDate)
@Html.EditorFor(model=>model.Reservations)//这可能需要更改为表或网格以容纳数据
}
我不是两个都有。。。我想我可以简单地将输入文本的值传递给控制器,而无需使用表单,只需使用脚本……您可以使用脚本,但脚本需要调用操作。这就是Ajax请求所做的,您告诉它调用哪个操作,发送哪个数据,以及在成功或出错时做什么。您拥有的脚本只不过是尝试调用一个不存在的函数。否则,您需要一个表单来保存datepicker控件,并需要一个submit按钮来发布到特定操作。在您的情况下,您的操作是索引。。它甚至不是一个可以发布到的方法,因为它缺少[HttpPost]属性。您需要查看asp.net/mvc查看学习mvc的pluralsight视频搜索的返回类型应该是JsonResult吗?您还返回视图,我认为这会导致错误……不,您没有返回视图,您正在将数据返回到视图,这是一个Ajax调用,意味着这是一个异步请求。看看pluralsight视频。我猜你对MVC不是很在行,对吗?请参阅答案中的更新,以适应打开视图、将ViewModel中的数据发布到控制器HttpPost操作并将数据返回到视图的功能
public ActionResult Index() {
var model = new ReservationSearchViewModel();
model.reservations = new List<Reservation>();
return View(model);
}
[HttpPost]
public ActionResult Index(ReservationSearchViewModel model) {
if(ModelState.IsValid)
var reservations = db.Reservations.Where(r => r.Date = model.SelectedDate).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date);
}
return View(model)
}
@model CormanReservation.Models.ReservationSearchViewModel
<h5>Select a date and see reservations...</h5>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.EditorFor(model => model.SelectedDate)
@Html.EditorFor(model => model.Reservations) // this may need to change to a table or grid to accomodate your data
<input type="submit" value="Search" />
}