web-dev-qa-db-fra.com

ASP.NET MVC obtenir une valeur d'entrée de zone de texte

J'ai une entrée de zone de texte et des boutons radio. Par exemple, mon HTML d'entrée de zone de texte ressemble à ceci:

<input type="text" name="IP" id="IP" />

Une fois que l'utilisateur a cliqué sur un bouton d'une page Web, je souhaite transmettre des données à mon contrôleur:

<input type="button" name="Add" value="@Resource.ButtonTitleAdd"  onclick="location.href='@Url.Action("Add", "Configure", new { ipValue =@[ValueOfTextBox], TypeId = 1 })'"/>

Peut-être que c'est trivial, mais mon problème est que je ne sais pas comment obtenir une valeur de zone de texte et la transmettre au contrôleur. Comment puis-je lire la valeur de la zone de texte et la transmettre au contrôleur via ipValue=@[ValueOfTextBox]?

60
user1624552

Un simple formulaire d'abonnement ASP.NET MVC avec une zone de texte de courrier électronique serait implémenté comme suit

Modèle

Les données du formulaire sont mappées sur ce modèle

public class SubscribeModel
{
    [Required]
    public string Email { get; set; }
}

Vue

Le nom de la vue doit correspondre au nom de la méthode du contrôleur.

@model App.Models.SubscribeModel

@using (Html.BeginForm("Subscribe", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
    <button type="submit">Subscribe</button>
}

Manette

Le contrôleur est responsable du traitement de la demande et du retour de la vue de réponse appropriée.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Subscribe(SubscribeModel model)
    {
        if (ModelState.IsValid)
        {
            //TODO: SubscribeUser(model.Email);
        }

        return View("Index", model);
    }
}

Voici la structure de mon projet. Veuillez noter que le dossier de vues "Accueil" correspond au nom de HomeController.

 ASP.NET MVC structure

129
Andrei

Vous pouvez utiliser jQuery:

<input type="text" name="IP" id="IP" value=""/>
@Html.ActionLink(@Resource.ButtonTitleAdd, "Add", "Configure", new { ipValue ="xxx", TypeId = "1" }, new {@class = "link"})

<script>
  $(function () {
    $('.link').click(function () {
      var ipvalue = $("#IP").val();
      this.href = this.href.replace("xxx", ipvalue);
    });
  });
</script>
21
Andriy Gubal

Essaye ça.

Vue:

@using (Html.BeginForm("Login", "Accounts", FormMethod.Post)) 
{
   <input type="text" name="IP" id="IP" />
   <input type="text" name="Name" id="Name" />

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

Manette:

[HttpPost]
public ActionResult Login(string IP, string Name)
{
    string s1=IP;//
    string s2=Name;//
}

Si vous pouvez utiliser la classe de modèle 

[HttpPost]
public ActionResult Login(ModelClassName obj)
{
    string s1=obj.IP;//
    string s2=obj.Name;//
}
10
Vidhyadhar Galande

Une autre façon en utilisant la méthode ajax:

Vue:  

@Html.TextBox("txtValue", null, new { placeholder = "Input value" })
<input type="button" value="Start" id="btnStart"  />

<script>
    $(function () {
        $('#btnStart').unbind('click');
        $('#btnStart').on('click', function () {
            $.ajax({
                url: "/yourControllerName/yourMethod",
                type: 'POST',
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                data: JSON.stringify({
                    txtValue: $("#txtValue").val()
                }),
                async: false
            });
       });
   });
</script>

Manette:

[HttpPost]
public EmptyResult YourMethod(string txtValue)
{
    // do what you want with txtValue
    ...
}
6
Andrei Karcheuski

vous pouvez le faire si simple:

Premièrement: par exemple, dans les modèles, vous avez User.cs avec cette implémentation

public class User
 {
   public string username { get; set; }
   public string age { get; set; }
 } 

Nous transmettons le modèle vide à l’utilisateur - Ce modèle sera rempli avec les données de l’utilisateur lorsqu’il soumettra le formulaire de cette manière.

public ActionResult Add()
{
  var model = new User();
  return View(model);
}

Lorsque vous renvoyez la vue par utilisateur vide en tant que modèle, elle correspond à la structure du formulaire que vous avez implémenté. Nous avons ceci sur le côté HTML:

@model MyApp.Models.Student
@using (Html.BeginForm()) 
 {
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Student</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.username, htmlAttributes: new { 
                           @class = "control-label col-md-2" })
            <div class="col-md-10">
                 @Html.EditorFor(model => model.username, new { 
                                 htmlAttributes = new { @class = "form-
                                 control" } })
                 @Html.ValidationMessageFor(model => model.userame, "", 
                                            new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.age, htmlAttributes: new { @class 
                           = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.age, new { htmlAttributes = 
                                new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.age, "", new { 
                                           @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" 
                 />
            </div>
        </div>
   </div>
}

Donc, sur le bouton soumettre, vous allez l'utiliser comme ceci

[HttpPost]
public ActionResult Add(User user)
 {
   // now user.username has the value that user entered on form
 }
0
vartie