Передача данных из представления в контроллер вместе со значениями формы - PullRequest
0 голосов
/ 06 декабря 2011

Часть веб-сайта, который я делаю (простая браузерная игра с поворотом за поворотом), требует, чтобы я передавал данные из представления в контроллер (передавая внешний ключ из DropDownList и другое целочисленное значение в представлении в качестве аргументак контроллеру).Затем контроллер использует эти значения для передачи выполнения другому контроллеру.

Моя проблема в том, что у меня проблемы с выяснением того, как MVC возвращает данные в моем представлении и объединяет их внутри типов и использует их в качестве параметров.Я знаю, что мог бы использовать ссылку действия, чтобы указать на мой следующий контроллер, но я не знаю, как извлечь выбранное значение в DropDownList.Для этого или используйте кнопку ввода, но тогда я не знаю, что или как возвращаются значения.

Скажите, если вам требуется дополнительное объяснение или что-то сбивает с толку.

Вот мой код:

Представление в Razor, получающее модель представления, определенную ниже.

@model BattleForLurnia_MVC.Controllers.ChooseCharacterViewModel
@{
    ViewBag.Title = "ChooseCharacter";
}

<h2>Choose Your Character</h2>
<fieldset>
    <legend>Choose your fighter !</legend>

    <div class="display-label">Your characters :</div>
    <div class="display-field">
        @Html.DropDownList("CharactersList", String.Empty)
    </div>


    @* Here is the part that returns the values, either an ActionLink or 
       an Input button.*@

</fieldset>

Моя модель представления передана в представление

public class ChooseCharacterViewModel
{
    Battle_For_LurniaEntities db = new Battle_For_LurniaEntities();

    public Player player { get; set; }
    public Character targetCharacter { get; set; }

    public ChooseCharacterViewModel(string playerUsername, Character opponent)
    {
        player = db.Players.Single(plr => plr.Username == playerUsername);
        targetCharacter = opponent;
    }

    public ChooseCharacterViewModel(){}
}

Контроллер, который отправляет View

    public ActionResult ChooseCharacter(int targetCharacter_ID)
    {
        Character targetChar = db.Characters.Single(chr => chr.ID_Character == targetCharacter_ID);

        ChooseCharacterViewModel chooseCharacter = new ChooseCharacterViewModel(Session["Username"].ToString(), targetChar);

        // Using LINQ to get characters owned by the current player. Fuckyeah.jpg =D
        IEnumerable<Character> blabla = from VAR in db.Characters
                                        where VAR.FK_Player_ID == chooseCharacter.player.ID_Player
                                        select VAR;

        ViewBag.CharactersList = new SelectList(blabla, "ID_Character", "Name");
        return View(chooseCharacter);
    }

И, наконец, контроллер, который получает данные в моем представлении и отправляет другое представление.

    [HttpPost]
    public ActionResult ChooseCharacter(int FK_Character_ID, Character targetCharacter)
    {
        Character sourceCharacter = db.Characters.Single(chr => chr.ID_Character == FK_Character_ID);

        return RedirectToAction("Fight", new {SourceCharacter = sourceCharacter, TargetCharacter = targetCharacter});
    }

1 Ответ

2 голосов
/ 06 декабря 2011

В вашей ViewModel создайте три свойства

  1. SelectedId
  2. ListOfItems
  3. OtherItemsThatYouNeedToGetBackAtController

Когда вы возвращаете POST в свой контроллериспользуя Html.BeginForm, модель будет передана обратно.Чтобы получить выбранное значение DropDown, измените синтаксис, как показано ниже:

@Html.DropDownListFor (m => m.SelectedId, новый SelectList (Model.ListofItems))

для OtherItemsThatYouNeedToGetBackAtControllerможно использовать @ Html.HiddenFor (m => m.OtherItemsThatYouNeedToGetBackAtController)

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