2013-05-20 4 views
5

В настоящее время у меня есть представление, которое содержит два текстовых поля, в которых пользователи могут вводить некоторые данные. Одно текстовое поле допускает только значения 1-10, а другое - строку. Я не уверен, какое изменение кода я сделал, но второе текстовое поле, принимающее строку, больше не работает. Например, когда я вхожу в строку и пытаюсь отправить форму, я получаю сообщение проверки, в котором говорится: «Значение» (строка) «неверно». Ниже приведены некоторые фрагменты кода в моем решении.Значение «(string)» недействительно

Объект:

public class MovieReview 
{ 
    public int Id { get; set; } 

    [Range(1, 10)] 
    [Required] 
    public int Rating { get; set; } 
    public string Review { get; set; } 
    public int MovieId { get; set; } 
} 

контроллер:

public class ReviewsController : Controller 
{ 
    private MovieLoversDb _db = new MovieLoversDb(); 

    public ActionResult Index([Bind(Prefix = "id")]int movieId) 
    { 
     var movie = _db.Movies.Find(movieId); 
     if (movie != null) 
     { 
      return View(movie); 
     } 
     return HttpNotFound(); 
    } 

    [HttpGet] 
    public ActionResult Create(int movieId) 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(MovieReview review) 
    { 
     if (ModelState.IsValid) 
     { 
      _db.MovieReviews.Add(review); 
      _db.SaveChanges(); 
      return RedirectToAction("Index", new { id = review.MovieId }); 
     } 
     return View(review); 
    } 

Частичный вид:

@model MovieLovers.Models.MovieReview 

@{ 
    ViewBag.Title = "Review a Movie"; 
} 

<h2>Review a Movie</h2> 

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

<fieldset> 
    <legend>New Review</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Rating) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Rating) 
     @Html.ValidationMessageFor(model => model.Rating) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Review) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Review) 
     @Html.ValidationMessageFor(model => model.Review) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.ReviewerName) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.ReviewerName) 
     @Html.ValidationMessageFor(model => model.ReviewerName) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

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

+0

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

+0

Да, прошу прощения. Обновление сейчас. –

+0

У вас есть другое поле на отображаемой странице с именем 'Review'? – Jasen

ответ

5

Я понял это, используя предложение по Jasen в комментариях под оригинальный пост. Кажется, что «Обзор», возможно, использовался дважды, хотя я не мог найти, где. Я изменил имя свойства на «тело», и теперь он работает.

Спасибо за вашу помощь!

+2

Два раза это свойство «MovieReview.Review» и параметр действия «(обзор MovieReview)». – Foole

0

Я думаю, что в ниже model.Review и Model.Rating не могут быть непосредственно доступны в качестве режима является IEnumerable

 <th> 
     @Html.DisplayNameFor(model => model.Rating) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Review) 
    </th> 
+0

Я удалил «IEnumerable», и он все еще отображает сообщение проверки. То же самое касается действия «Изменить», которое я недавно создал для этого. –

-1

Удалить @Html.ValidationSummary(true)

или

удалить все ValidationMessageFor и изменения для (удалить true) @Html.ValidationSummary()

Редактировать:

Вы хотите быть удалить все ValidationMessageFor и изменить ValidationSummary(true) к ValidationSummary()

+0

Будет ли это удалять валидацию на этих формах? –

+0

Вы хотите удалить все ValidationMessageFor и изменить ValidationSummary (true) на ValidationSummary() –

1

Пожалуйста, попробуйте использовать

public class MovieReview 
{ 
    public int Id { get; set; } 

    [Range(1, 10)] 
    [Required] 
    public int Rating { get; set; } 
    public string? Review { get; set; } 
    public int MovieId { get; set; } 
} 
+0

Я не могу. Я использую MovieReview в родовом типе на другом объекте. Я получаю сообщение об ошибке, указывающее, что это поле не может быть нулевым. –

+0

Строки уже обнуляются. – Jasen

+0

Вы использовали EF. Правильно? И приближающаяся модель сначала? – thangchung

1

Это не работает, потому что ваш класс домена имеет свойство с именем Review (public string Review { get; set; }), а метод, который получает обновленный класс домена, также имеет параметр с именем review (public ActionResult Create(MovieReview review)).

Изменение public ActionResult Create(MovieReview review) по public ActionResult Create(MovieReview movieReview).

2

проблема имя поля обзора:

@ Html.EditorFor (модель => модель.Обзор)

в качестве имени параметра в контроле:

общественного ActionResult Создать (MovieReview обзор)

Изменение имени параметра должно работает слишком

0

ваше имя var не должно совпадать с именем класса. Попробуйте это:

public class MovieReview 
{ 
    public int Id { get; set; } 

    [Range(1, 10)] 
    [Required] 
    public int ratingId { get; set; } 
    public string reviewText { get; set; } 
    public int movieId1 { get; set; } 
} 
Смежные вопросы