Как я могу отправить несколько объектов внутри формы сообщения значения для добавления - PullRequest
2 голосов
/ 04 марта 2012

У меня есть представление создания, чтобы добавить ответы на вопрос, в настоящее время пользователь может добавить только один ответ одновременно, когда он нажимает кнопку отправки, вместо этого я хочу, чтобы пользователь мог вставлять несколько объектов ответовв то же представление, а затем в систему, чтобы добавить все эти новые объекты ответа в базу данных после того, как пользователь нажмет кнопку отправки, мое текущее представление выглядит следующим образом: -

@model Elearning.Models.Answer 
@{ 
    ViewBag.Title = "Create"; 
} 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
 <div id = "remove">
 @using (Ajax.BeginForm("Create", "Answer", new AjaxOptions
{
    HttpMethod = "Post",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "remove"
}))

 {
     <div id = "returnedquestion">
     @Html.ValidationSummary(true)

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

    </fieldset> 
     <input type= "hidden" name = "questionid" value = @ViewBag.questionid>
     <input type= "hidden" name = "assessmentid" value = @ViewBag.assessmentid>
     <input type="submit" value="Add answer" />
 </div>
 }
 </div>

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

public ActionResult Create(int questionid)//, int assessmentid)
{
    ViewBag.questionid = questionid;
    Answer answer = new Answer();
              return PartialView("_answer",answer);
} 

//
// POST: /Answer/Create

[HttpPost]
public ActionResult Create(int questionid, Answer a)
{
    if (ModelState.IsValid)
    {

        repository.AddAnswer(a);
        repository.Save();
        return PartialView("_details",a);
    }
    return View(a);}

так, как я могу изменить приведенный выше код, чтобы иметь возможность вставлять несколько объектов ответов в одном представлении, а затем отправлять эти объекты ответов одновременно, когда пользовательнажмите на кнопку отправить?

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Я думаю, это то, что вы ищете

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Заключение : вы должны выполнить пост-действие с параметром ICollection<Answer>, тогда он будетих легко получить, когда вы публикуете основную форму и создаете соответствующий объект QUESTION, а затем сохраняете их все только с помощью одной отправки.

1 голос
/ 04 марта 2012

Попробуйте опубликовать список Добавить ввод с помощью JavaScript, когда пользователь нажимает «Добавить ответ». А при отправке формы все данные ответа будут опубликованы для привязки к списку

<script>
$(document).ready(function () {
    var anwserCount = 1;
    $("#addbutton").click(function () {
        $("#AnwsersDiv")
       .append("<input type='text' name='Anwsers[" + anwserCount + "]'/>");
        anwserCount += 1;
    });
});
</script>

@using (Html.BeginForm())
{
<div id="AnwsersDiv">
    <input type="text" name="Anwsers[0]" />
</div>
<input id="addbutton" type="button" value="Add answer" />
<input type="submit" value="submit" />
}

Модель

public class Answer
{
    public List<String> Anwsers { get; set; }
}

При отправке формы

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...