2011-01-05 4 views
0

У меня есть следующий метод создания в моем HomeController:ASP.NET MVC Создание метода

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create([Bind(Exclude = "Id")]Article articleToCreate) 
     { 
      if (!ModelState.IsValid) 
       return View(); 

      try 
      { 
       _db.AddToArticleSet(articleToCreate); 
       _db.SaveChanges(); 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

А вот вид:

<% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       <label for="headline">Headline</label> 
       <%= Html.TextBox("headline") %> 
      </p> 
      <p> 
       <label for="story">Story</label> 
       <%= Html.TextArea("story") %> 
      </p> 
      <p> 
       <label for="image">Image URL</label> 
       <%= Html.TextBox("image") %> 
      </p> 
      <p> 
       <input type="submit" value="Create News Story" /> 
      </p> 
     </fieldset> 

    <% } %> 

Однако, когда я ударил представить, я только что вернулся в форма (с заполненными полями), и новая история не создается. Любые идеи почему? Благодарю.

Edit: я получаю следующее сообщение об ошибке в InnerException { "перелива SqlDateTime Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.."}

+3

Вы спросили своего отладчика? – driis

ответ

3

Есть только две ситуации, которые могут привести к тому, что это произойдет. Либо ваш ModelState недействителен:

if(!ModelState.IsValid) 
    return View(); 

Или есть исключения, появляющейся при попытке записи в БД:

catch { return View(); } 

Поскольку у вас нет сообщений о проверке на ваш взгляд, нет никакой визуальной обратной связи для того, или что-то недействительно. Мне также нечего сказать, есть ли проблемы с базой данных.

Я бы предложил установить точку останова в начале действия метода и пройти. Это точно скажет вам, в чем проблема.

+0

Это происходит в 'catch' и говорит об ошибке при обновлении записей. Дополнительную информацию см. В описании innerexception. – Cameron

+0

Я получаю эту ошибку: {"Переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM."} – Cameron

+0

@Cameron - Учитывая, что у вас нет поле выбора даты в вашем представлении, и вы не устанавливаете его в своем контроллере, я бы сказал, что это ваша проблема. –

0

В обоих случаях, когда вы возвращаете представление, вы никоим образом не возвращаетесь к тому, что пошло не так. Таким образом, либо ваше состояние модели недействительно, либо не удалось сохранить в базу данных.

0

Поскольку вы пытаетесь исключить любое исключение, возникающее при создании статьи, вы никогда не получите ошибку, которая произойдёт на этом этапе. (See Elmah for a very, very easy way to log all of your errors)

Вы пытались установить контрольную точку в методе и посмотреть, что на самом деле происходит? Я бы поспорил, что либо ваше состояние модели недействительно, либо вы получаете исключение.

Чуть не связан - ни один из методов возврата:

return View(); 

return RedirectToAction("Index"); 

// and the last one 
return View(); 

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

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