2013-08-26 2 views
1

Внезапно мое действие Create/view начало вызывать исключение NullReferenceException. На самом деле это началось после перехода на самонастройки Твиттеру 3.Создание действия, вызывающего NullReferenceException

Это первая линия, которая вызывает исключение:

@Html.LabelFor(model => model.Name, new { @class = "col-lg-2 control-label" }) 

Вот мой код контроллера:

 // 
     // GET: /Panel/Partners/Create/ 
     [Authorize] 
     public ActionResult Create() 
     { 
      ViewData["Logo"] = ""; 

      return View(); 
     } 

Частичный вид (форма) :

@model MyApp.Entities.Partner 

<fieldset data-listurl="@Url.Action("Index", "Partners", new { Area = "Panel" })" data-removelogo="@Url.Action("RemoveLogo", "Partners", new { Area = "Panel" })"> 
    <legend>Partners</legend> 


    <div class="form-group"> 
     @Html.LabelFor(model => model.Name, new { @class = "col-lg-2 control-label" }) 
     <div class="col-lg-10"> 
      <div class="col-lg-7"> 
       <input type="text" id="Name" name="Name" value="@Model.Name" class="form-control" /> 
       @Html.ValidationMessageFor(model => model.Name) 
      </div> 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Logo, new { @class = "col-lg-2 control-label" }) 
     <div class="col-lg-10"> 
      <div id="file-upload"> 
       <div class="col-lg-9"> 
        <span class="">@(ViewData["Logo"] == null || String.IsNullOrWhiteSpace(ViewData["Logo"].ToString()) ? "No file" : ViewData["Logo"].ToString()) </span> 

        <a href="#" class="btn btn-primary select-button">Choose</a> 
       </div> 
       <input type="file" name="fileUpload" id="fileUpload" style="left: 0; top: -5000px; position: absolute;" /> 
      </div>@Html.HiddenFor(model => model.Logo) 
      <div class="col-lg-9"> 
       @if (ViewData["Logo"] != null && !String.IsNullOrWhiteSpace(ViewData["Logo"].ToString())) 
       { 
        <p><img src="@String.Concat("http://remotepark.blob.core.windows.net/pictures/", ViewData["Logo"])" id="logoView" class="img-thumbnail" style="max-height: 150px" /></p> 
        <p><a href="#" class="btn btn-default remove-button">Remove</a></p> 
       } 
      </div> 
     </div> 
    </div> 

    <div class="row form-actions"> 
     <div class="col-lg-12"> 
      <input type="submit" id="btnSubmit" class="btn btn-primary" value="Save" /> 
      <input type="button" class="btn" id="btnCancelar" value="Cancel" /> 
     </div> 
    </div> 
</fieldset> 

Create.cshtml

@model MyApp.Entities.Partner 

<div class="panel-middle-top"> 
    <div class="middle-top-left"></div> 
    <div class="middle-top-center"> 
     <ul class="breadcrumb" style="background-color: transparent;"> 
      <li><a href="@Url.Action("Index", "Home", new { Area = "Panel" })">Home</a></li> 
      <li><a href="@Url.Action("Index", "Partners", new { Area = "Panel" })">Partners</a></li> 
      <li class="active">New</li> 
     </ul> 
    </div> 
    <div class="middle-top-right"></div> 
</div> 
<div class="panel-middle-content"> 
    @Html.Partial("/Areas/Panel/Views/Shared/_Alerts.cshtml") 

    @using (Html.BeginForm("Create", "Partners", 
     FormMethod.Post, 
     new { 
      enctype = "multipart/form-data", 
      id = "partnersForm", 
      @class="form-horizontal", 
      rule="form" 
     })) 
    { 
     @Html.Partial("_PartnersForm") 
    } 
</div> 

класс Модель

public partial class Partner 
    { 
     #region Primitive Properties 

     public int ID { get; set; } 

     public string Name { get; set; } 

     public string Logo { get; set; } 

     /// <summary> 
     /// Indicater whether this partner is associated to the current parking lot 
     /// </summary> 
     public bool Associated { get; set; } 

     #endregion 

     #region Navigation Properties 

     public ICollection<ParkingLot> ParkingLots 
     { 
      get 
      { 
       if (_parkingLots == null) 
       { 
        var newCollection = new FixupCollection<ParkingLot>(); 
        newCollection.CollectionChanged += FixupParkingLots; 
        _parkingLots = newCollection; 
       } 
       return _parkingLots; 
      } 
      set 
      { 
       if (!ReferenceEquals(_parkingLots, value)) 
       { 
        var previousValue = _parkingLots as FixupCollection<ParkingLot>; 
        if (previousValue != null) 
        { 
         previousValue.CollectionChanged -= FixupParkingLots; 
        } 
        _parkingLots = value; 
        var newValue = value as FixupCollection<ParkingLot>; 
        if (newValue != null) 
        { 
         newValue.CollectionChanged += FixupParkingLots; 
        } 
       } 
      } 
     } 
     private ICollection<ParkingLot> _parkingLots; 

     #endregion 

     #region Association Fixup 

     private void FixupParkingLots(object sender, NotifyCollectionChangedEventArgs e) 
     { 
      if (e.NewItems != null) 
      { 
       foreach (ParkingLot item in e.NewItems) 
       { 
        if (!item.Partners.Contains(this)) 
        { 
         item.Partners.Add(this); 
        } 
       } 
      } 

      if (e.OldItems != null) 
      { 
       foreach (ParkingLot item in e.OldItems) 
       { 
        if (item.Partners.Contains(this)) 
        { 
         item.Partners.Remove(this); 
        } 
       } 
      } 
     } 

     #endregion 

    } 

ли я что-то отсутствует?

+0

modifiy ур quieston с моделью –

+0

ли это 'Action' или' View' бросать исключение? – Nilesh

+0

Частичный вид (строка 8). –

ответ

1

Рассматривая код контроллера, вы не передаете пустую модель в представление, поэтому для ярлыка не существует привязки к исключению нулевой ссылки. Я думаю, вам нужно что-то вроде следующего.

// 
     // GET: /Panel/Partners/Create/ 
     [Authorize] 
     public ActionResult Create() 
     { 
      ViewData["Logo"] = ""; 
      var model = new MyModel() 
      return View(model); 
     } 

EDIT
Я думаю, что это строка кода, которая дает вам проблему <input type="text" id="Name" name="Name" value="@Model.Name" class="form-control" /> как он пытается получить доступ к имени свойства модели, которая является нулевым, если вы не сдадите что угодно для представления. Добавление код выше дал мнению, модель для ссылки и, следовательно, может получить значение для свойства Name

Вы

+0

Это сработало, но у меня есть другие контроллеры с действием Create, которое не возвращает ни одного экземпляра моих моделей, и они работают нормально. И, как пример, образец MVC Music Store не возвращает экземпляр модели в действие Register, но он отлично работает. http://mvcmusicstore.codeplex.com/SourceControl/latest#MvcMusicStore/Controllers/AccountController.cs –

+0

Я попробую предложение, которое вы дали после редактирования ответа. –

+1

Проблема была в следующей строке:

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