Передача переменных с POST в ASP.NET MVC - PullRequest
9 голосов
/ 22 октября 2011

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

Моя разметка:

@{
    ViewBag.Title = "TestForm";
}

<h2>TestForm</h2>

@using (Html.BeginForm()) {
   <input type="text" id="testinput" />

    <input type="submit" value="TestForm" />
}

Мой контроллер:

public ActionResult TestForm()
{
    return View();
} 

[HttpPost]
public ActionResult TestForm(string testinput)
{
    Response.Write("[" + testinput + "]");

    return View();
}

Я установил точку останова во втором методе TestForm, и testinput имеет значение null .... Я что-то упустил?

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

Как часть одного и того же вопроса, как передать несколько переменных? Будет ли метод в моем контроллере выглядеть так:

[HttpPost]
public ActionResult TestForm(string var1, var2)
{
}

Ответы [ 2 ]

19 голосов
/ 22 октября 2011

Для меня похоже, что вы устанавливаете идентификатор, а не имя.Я использую MVC3 каждый день, поэтому я не воспроизводю ваш образец.(Я бодрствую в течение 20 часов программирования;), но все еще мотивирован, чтобы помочь) Пожалуйста, скажите мне, если это не работает.Но для меня похоже, что вы должны установить свойство "имя" ... а не свойство id.Попробуйте ... я жду сейчас, чтобы помочь вам, если это не сработает.

     <input type="text" id="testinput" name="testinput" />
1 голос
/ 22 октября 2011

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

  • строго типизированные просмотры
  • Модель MVC Binding
  • Html Helpers

Создать новую модель вида:

public class TestModel
{
    public string TestInput { get; set; }
}

Ваш тестовый контроллер:

    [HttpGet]
    public ActionResult TestForm()
    {
        return View();
    }

    [HttpPost]
    public ActionResult TestForm(FormCollection collection)
    {
        var model = new TestModel();
        TryUpdateModel(model, collection);

        Response.Write("[" + model.TestInput + "]");

        return View();
    }

Ваш взгляд:

@model <yourproject>.Models.TestModel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>TestForm</title>
</head>
<body>
    <div>
        @using(Html.BeginForm())
        {
            <div class="editor-label">
                @Html.LabelFor(m => m.TestInput)
            </div>
            <div class="editor-label">
                @Html.TextBoxFor(m => m.TestInput)
            </div>
            <input type="submit" value="Test Form"/>
        }
    </div>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...