2013-06-01 22 views
1

Я пытаюсь добавить строку в моей таблице, когда кнопка а вставки пользовательских данных и кликов добавить ..Данные не передаются от представления к контроллеру в mvc3

Мой контроллер выглядит следующим образом:

[HttpPost] 
public ActionResult Index(PurchaseOrder purchaseorder,String btnSubmit) 
{ 
    ViewBag.paymenttypes = Constants.PaymentType(); 
    ViewBag.supplierid = new SelectList(db.suppliers, "supplierid", "suppliername"); 
    ViewBag.productid = new SelectList(db.products, "productid", "productname"); 


    switch (btnSubmit) 
    { 
     case "Add": 
      purchaseorder.purchasedetails.Add(purchaseorder.detail); 
      break; 
     case "Save": 
      break; 
    } 

    return View(purchaseorder); 
} 

Вид выглядит следующим образом:

@using (Html.BeginForm("Index","PurchaseOrder",FormMethod.Post)) 
{ 

{ 
    @Html.ValidationSummary(true) 
    @Html.ValidationMessageFor(model => model.purchase.billno) 
<div class="block-content collapse in"> 
<div style="float:left; margin-left:20px;">@Html.TextBoxFor(model => model.purchase.purchasedate, new { @readonly = "readonly" })</div> 
<div style="float:left; margin-left:20px;">@Html.TextBoxFor(model => model.purchase.billno, new { @Value = "Enter Bill Number" })</div> 
<div style="float:left; margin-left:20px;"> @Html.DropDownListFor(model => model.purchase.cashcredit, 
new SelectList(ViewBag.paymenttypes, "key", "value"))</div> 
<div style="float:left; margin-left:20px;">@Html.DropDownList("supplierid", "Select Supplier")</div> 
<div style="clear:both;"></div> 
<hr /> 
<table style="margin-left:10px;" class="table table-striped" id="details"> 
    <tr> 
     <th> 
      Product 
     </th> 
     <th> 
      Cost Price 
     </th> 
     <th> 
      Quantity 
     </th> 
     <th> 
      Selling Price 
     </th> 
    </tr> 
    <tr> 
     <td> 
      @Html.DropDownList("productid", "Select Product") 
     </td> 
     <td> 
      @Html.TextBoxFor(model => model.detail.costprice) 
     </td> 
     <td> 
      @Html.TextBoxFor(model => model.detail.quantity) 
     </td> 
     <td> 
      @Html.TextBoxFor(model => model.detail.sellingprice) 
     </td> 
     <td> 

       </td> 
    </tr> 
    @foreach (var item in Model.purchasedetails) 
    { 
    <tr id="abc"> 
     <td > 
      @Html.DisplayFor(modelItem => item.product.productcode) 
     </td> 
     <td > 
      @Html.DisplayFor(modelItem => item.costprice) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.quantity) 
     </td> 
     <td > 
      @Html.DisplayFor(modelItem => item.sellingprice) 
     </td> 
    </tr> 
    } 
</table> 
<input type="submit" id="Add" name="btnSubmit", value="Add" /> 
    <input type="submit" id="Save" name="btnSubmit", value="Save" /> 

    </div> 

Все, что я пытаюсь сделать, когда пользователь добавляет новые данные в строке таблицы и нажимает кнопку добавить. Он должен быть добавлен к модели, а также к таблице.

Я просто получаю исключение из null указателя. Кто-нибудь может мне помочь, пожалуйста.

Вот трассировка стека исключения Ошибка сервера в приложении «/». Ссылка на объект не установлена ​​в экземпляр объекта. Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении:

System.NullReferenceException: Object reference not set to an instance of an object. 
Source Error: 
Line 44:    { 
Line 45:     case "Add": 
Line 46:      purchaseorder.purchasedetails.Add(purchaseorder.detail); 
Line 47:      break; 
Line 48:     case "Save": 
Source File: C:\Users\Ayush Raj Aryal\Desktop\SidhhaBaba\SidhhaBaba\siddha-baba-project\SiddhaBaba\SiddhaBaba\Controllers\Admin\PurchaseOrderController.cs Line: 46 

Stack Trace: 
[NullReferenceException: Object reference not set to an instance of an object.] 
SiddhaBaba.Controllers.PurchaseOrderController.Index(PurchaseOrder purchaseorder, String btnSubmit) in 
C:\Users\Ayush Raj Aryal\Desktop\SidhhaBaba\SidhhaBaba\siddha-baba-project\SiddhaBaba\SiddhaBaba\Controllers\Admin\PurchaseOrderController.cs:46 

Может кто-нибудь пожалуйста, помогите мне с этим

+0

В какой строке кода есть 'NullReferenceException'? –

+0

'null Указатель исключений' Вы имели в виду' NullReferenceException'? Было бы неплохо, если бы вы разместили исключение stacktrace. – Leri

+0

Я добавил трассировку стека тоже сейчас. – Ayush

ответ

1

Я думаю, вы получаете исключение в этой строке:

purchaseorder.purchasedetails.Add(purchaseorder.detail); 

Причиной этого является что purchaseorder.purchasedetails, вероятно, не установлен, потому что вы не отправляете какие-либо купленные детали.

Вы указываете приобретенные детали, но с использованием @Html.DisplayFor не генерируется <input> элементов. Если вы хотите, чтобы данные приобретенных подробностей были отправлены, вам нужно что-то сделать по линии:

@foreach (var item in Model.purchasedetails) 
{ 
    <tr id="abc"> 
     <td > 
      @Html.DisplayFor(modelItem => item.product.productcode) 
      @Html.HiddenFor(modelItem => item.product.productcode) 
     </td> 
    </tr> 
+0

Я пробовал делать это, но данные еще не отправлены. Я использую модель обертки, чтобы обернуть классы, используемые здесь. Класс выглядит следующим образом: public class PurchaseOrder { покупка государственных закупок {get; задавать; } Публикация сведений о деталях {get; задавать; } открытый список receivedetails {get; задавать; } } Может ли это быть причиной? – Ayush

+0

[Этот ответ] (http://stackoverflow.com/a/11682510/695586) должен помочь вам с привязкой сложных моделей, где наиболее предпочтительным способом является РедакторTemplate –

+0

, который вы создали для меня. Я сделал это, используя IList, я бы также попробовал использовать шаблон редактора, как там было предложено. – Ayush

Смежные вопросы