2012-05-11 77 views
1

我知道有這樣的問題很多,但我真的無法得到答案的解釋......這是我的看法......通輸入文本到控制器

<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> 
    &nbsp;<input name="dateInput" type="text" class="alternate" /> 
</div> 

我想輸入文本的值...在我的輸入文本中已經有一個值,因爲日期選擇器將值傳遞給它...我不能做的是將它傳遞給我的控制器...這是我的控制器:

private CormantReservationEntities db = new CormantReservationEntities(); 
    public ActionResult Index(string dateInput) 
    { 
     DateTime date = Convert.ToDateTime(dateInput); 
     var reservations = db.Reservations.Where(r=>r.Date==date).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date); 
     return View(reservations.ToList()); 
    } 

我想在我的主頁上列出用戶在我的主頁的日曆中選擇的日期期間所做的預訂......

回答

0

我在您的視圖中看不到Form標籤...或者您沒有顯示整個視圖?很難說......但要發佈到你的控制器,你應該通過ajax調用將值發送給控制器,或發佈一個模型。在你的情況下,你的模型是一個IEnumerable<CormanReservation.Models.Reservation>和你的輸入是一個日期選擇器,看起來不像它綁定到你的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 
      } 
     } 
    }); 
} 

您的日期選擇器控制需要的東西通過

<input id="myDatePicker" name="dateInput" type="text" class="alternate" /> 

你的行動可以再看看一些引用它的例子像這樣

private CormantReservationEntities db = new CormantReservationEntities(); 

public JsonResult Search(string dateInput) { 
    DateTime date = Convert.ToDateTime(dateInput); 
    var reservations = db.Reservations.Where(r=>r.Date==date).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date); 
    return View(reservations.ToList()); 
    return Json(new {Success = true, Data = reservations.ToList()}, JsonRequestBehaviour.AllowGet()); 
} 

更新

如果您希望將其設置爲發佈數據並返回視圖的標準帖子,則需要對其進行類似的更改。

創建一個視圖模型

public class ReservationSearchViewModel { 
    public List<Reservation> Reservations { get; set; } 
    public DateTime 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) 
} 

修改您的查看,以便您有表格可以發佈到索引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" /> 
} 
+0

我沒有這兩個...我以爲我可以簡單地將輸入文本的值傳遞給控制器​​,而無需使用表格,只能使用腳本... –

+0

您可以使用腳本,但腳本需要調用該操作。這就是Ajax請求所做的事情,您告訴它要調用哪個操作,要發送哪些數據以及成功或錯誤時要做什麼。你所擁有的腳本只是嘗試調用一個不存在的函數。否則,您需要一個表單來保存您的日期選擇器控件和一個提交按鈕以發佈到特定的操作。在你的情況下你的行爲是索引..它甚至不是你可以發佈的方法,因爲它缺乏[HttpPost]屬性。你需要看看asp.net/mvc看看pluralsight vids學習MVC –

+0

應該返回的搜索類型是JsonResult嗎?你也回來查看,我認爲這會導致錯誤... –