2014-01-23 2 views
0

Я, вероятно, все это делаю неправильно, но частично работает, поэтому я надеюсь, что это недостаток знания правильного синтаксиса.Построение массива для ввода данных из флажка в представлении MVC

Я создаю массив checkbox из запроса linq, который работает нормально. Затем я проверяю, имеет ли значение ответа значение, соответствующее значению флажка. Пока что так хорошо, НО он не будет создавать массив для ввода в базу данных, он просто возвращает значение первого флажка.

Можете ли вы определить ошибку в моем синтаксисе? Я очень новичок в Razor и, как правило, придерживаюсь HTML, который я знаю, а не помощников. Я узнаю их - со временем!

// Checkbox 
    <div class="checkbox"> 
    @foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking)) 
    { 
     if (q.Answer == item.QuestionOption1) 
     { 
     <input type="checkbox" name="Answer" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br /> 
     **q.Answer = q.Answer + "," + item.QuestionOption1;** 
     } 
     else 
     { 
     <input type="checkbox" name="Answer" id="Answer" value="@item.QuestionOption1" />@item.QuestionOption1<br /> 
     } 
    } 
</div> 

Утверждение q.Answer ничего не делает. Как мне его закодировать, пожалуйста?

И модель;

namespace Template.Models 
{ 
using System; 
using System.Collections.Generic; 

public partial class QuestionOption 
    { 
    public int Id { get; set; } 
    public int QuestionId { get; set; } 
    public string QuestionOption1 { get; set; } 
    public Nullable<int> QuestionOptionRanking { get; set; } 

    public virtual Question Question { get; set; } 
    } 
} 
+0

Я бы поменял 'id' на каждый' элемент'. Я не знаю, является ли это причиной вашей проблемы, но я бы предложил сначала создать уникальные идентификаторы для всех ваших флажков. –

+0

Есть ли шанс на пример? Кто-то опубликовал код, и я попробовал его, но его не работало, и новый пример исчез! Не знаете, что там произошло; но это все равно не сработало. – Alex

+0

Это был я, но я неправильно понял ваш вопрос, поэтому я удалил свой (неправильный) ответ. Вы должны опубликовать определение модели (например, 'QuestionOptions'), чтобы у нас появилась информация. –

ответ

0

Вы должны дать уникальное имя для каждого флажка. Попробуйте следующее.

@{ 
    int count=1; 
    string name="Answer"+1; 
    foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking)) 
{ 
    if (q.Answer == item.QuestionOption1) 
    { 
    <input type="checkbox" [email protected] id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br /> 
    **q.Answer = q.Answer + "," + item.QuestionOption1;** 
    } 
    else 
    { 
    <input type="checkbox" [email protected] id="Answer" value="@item.QuestionOption1" />@item.QuestionOption1<br /> 
    } 
    count++; 
} 
} 
+0

Я установил так много точек останова - но он, кажется, не попадает в q.answer = q.Answer ... заявление перед входом. Он просто возвращает null. Должен ли я переместить линию на модель ввода? – Alex

0

MVC следует атрибуту имени для привязки к модели, вы должны объявить все флажки с различным значением атрибута имени.

How to post a list with MVC Model binding

Say

<input type="checkbox" name="QuestionOptions[0]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br /> 
<input type="checkbox" name="QuestionOptions[1]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br /> 
<input type="checkbox" name="QuestionOptions[2]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br /> 
+0

Я пробовал это, используя предложение Азима, но он возвращает null. Пожалуйста, см. Мой комментарий к его ответу. – Alex

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