2016-05-10 47 views
1

控制器:MVC HTTP輸入後返回NULL

public ActionResult MyController() 
{ 
    ViewBag.DateNow = DateTime.Now.ToString("yyyy-MM-dd"); 
} 

[HTTPPost] 
public ActionResult MyController(string fromDate) 
{ 
    ViewBag.DateNow = fromDate; 
} 

查看:

@using (Html.BeginForm("MyController", "Account", FormMethod.Post)) 
{ 
    //datepicker class: bootstrap-datepicker.js 
    <input id="fromDate" type="text" class="datepicker" /> 

    <buttontype="submit" value="Search" class="btn btn btn-primary"> 
     Search 
    </button> 
} 

我試圖做到的,是POST之前進入ViewBag.DateNow的數據是當前的日期和它成功地引入了這個觀點。但是,當我試圖填寫輸入表單(例如:2016-05-10)並單擊搜索按鈕。但似乎從fromDate字符串返回NullReferenceException。我在網上嘗試了一些解決方案,但我仍然無法做到這一點,這就是爲什麼我決定將此貼出來。提前致謝!

+3

您輸入沒有'name'屬性,所以它的值沒有提交 - '

+0

嘗試將控件中的字符串類型從字符串更改爲DateTime – Baahubali

+0

@ StephenMuecke非常感謝你,它像一個魅力。 – J4X

回答

1

爲此才能正常工作,你需要在textbox中指定name屬性。它需要與您的HTTP post操作方法中的輸入變量值相同,即fromDate。目前id屬性設置爲fromDate

<input id="fromDate" name="fromDate" type="text" value="@ViewBag.DateNow" /> 

如果當您發表您的形式fromDate永遠是null不指定此name屬性即可。像上面指定它將確保fromDate將始終有一個值(如果輸入)。

我想在這裏說點偏離主題,我想建議您使用view models作爲您的表單提交。您可以將視圖模型作爲輸入參數,而不是在操作方法中使用單獨的輸入變量。

我寫了一個答案,視圖模型在這裏是什麼,請去閱讀它,如果你有時間:

What is ViewModel in MVC?

在你的榜樣工作,我會只包含一個視圖模型一個物業,即FromDateFromDate將包含您的文本框中的值。這是設置爲string因爲你想傳遞一個格式化的日期值:

public class TestModel 
{ 
    public string FromDate { get; set; } 
} 

此值會在你HTTP get操作方法來設置和視圖模型將被髮送到視圖:

public ActionResult Index() 
{ 
    TestModel model = new TestModel(); 
    model.FromDate = DateTime.Now.ToString("yyyy-MM-dd"); 

    return View(model); 
} 

在你看來,你會接受這個視圖模型並創建相應的形式:

@model WebApplication_Test.Models.TestModel 

@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(m => m.FromDate) 
    <button type="submit">Search</button> 
} 

當您提交此表,你需要一個HTTP post處理提交的操作方法。由於視圖綁定到視圖模型,操作方法將接受它作爲輸入參數:

[HttpPost] 
public ActionResult Index(TestModel model) 
{ 
    // Do what you need to do 
    string date = model.FromDate; 

    return View(model); 
} 

你做這件事的方式也是正確的。我剛剛向您展示了一種替代方法。有一天,你可能會有一個巨大的表單,有很多輸入值,那麼我的方法將是'更清潔'。

2

試試這個:

1)更換的[HttpPost]代替[HTTPPost]

2)您應該添加名稱=」「輸入這樣的:

<input id="fromDate" name="fromDate" type="text" class="datepicker" /> 
+0

Holy [blank] !!謝謝。我只是花了很長時間想知道爲什麼只有我的幾個表單輸入進入一個行動。顯然,如果沒有[HttpPost],我會得到一個隨機的輸入子集,工作或不工作。 – Dronz