2016-12-30 61 views
0

我有一個模型查看找不到型號

class Person { 
    public int id {get;set;} 
    public String name {get;set;} 
} 

並在視圖

@model IEnumerable<Project.Models.Person> 
    @foreach (var p in Model){ 
    @Html.TextBox(p.name) 
    } 

但是,當我嘗試運行應用程序,我得到

系統。 NullReferenceException

上線

`@Html.TextBox(p.name)` 

的控制器

public ActionResult Add(){ 
return View(); 
} 

任何想法。我正在嘗試將人員列表發送到視圖,以便我可以生成多行進行輸入。

+0

請添加您的操作方法代碼。 – Ahmar

+0

添加填充IEnumerable的操作方法,以便我們可以看到缺少的內容。顯然名稱字段沒有填充.. –

回答

0

如果你想顯示多條記錄的形式,您認爲應該是這樣的。

@model Project.Models.Person 

@using(Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    <div id="formData"> 
     <button type="button" id="Add" onclick="Add();">Add</button> 
    </div> 
    <button type="submit">Submit</button> 
} 
<script> 
    function Add(){ 
     document.getElementById("Add").innerHtml += "@Html.EditorFor(m => m.name)"; 
    } 
</script> 

然後你可以實現一個post方法。

public ActionResult Add() 
{ 
    return View(); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Add(IEnumerable<Person> list) 
{ 
    return View(); 
} 
0

您沒有從操作方法返回任何列表來查看。更改您的視圖

@model Project.Models.Person 
@Html.TextBox("name") 
+0

仍然給出相同的例外 – user2018756

+0

您沒有從操作方法返回任何列表來查看。檢查更新的答案。 – Ahmar

0
public ActionResult Add(){ 
var objPerson = new List<Person>(); 
objPerson[0].name = ""; // As you want to display blank textboxes for your Form. currently it will show only one textbox. 
return View(objPerson); 
} 

動作方法應該是這樣的。您沒有在視圖方面傳遞您的模型的任何價值。所以它得到P(你的模型)爲NULL並且無法找到p.name,所以它給出了Null Exception錯誤。

希望它能解決您的問題。

+0

但我希望視圖顯示一個表單(多個表單),以便可以一次輸入多個記錄。我不想顯示任何記錄。 – user2018756

+0

它應該是列表,因爲模型期望IEnumerable –

+0

如果要顯示多條記錄的表單,則應該使用'@ HTML.TextboxFor(Model => Model。名稱)'並將其放入循環中。在「添加更多行」中添加一個「按鈕」。你的方法應該是這樣的。這樣你就無法達到你想要的。 –

0

發生System.NullReferenceException,因爲您沒有將任何數據發送到控制器的視圖。因此,模型的值應該爲null,並且會引發錯誤。

爲了解決這個問題,您可以傳遞控制器中的數據並將其顯示在視圖頁面中。

控制器

public ActionResult Add(){ 

var obj=new List<Person>(); 

//add your Person data to list and return 
return View(obj); 
} 

查看

@model IEnumerable<Project.Models.Person> 
    @foreach (var p in Model){ 
    @Html.TextBox(p.name) 
    }