ASP.NET MVC Transmettre des données de la vue au contrôleur
J'ai vue avec une grille qui contient des éléments ajoutés à un poste de travail. L'utilisateur peut sélectionner un élément dans une liste déroulante et cliquez sur un lien d'action qui appelle un contrôleur qui ajoute que le point de la station de travail. Je peux le faire fonctionner par la lecture de la FormCollection objet dans le Post de l'action du contrôleur.
<p>
<% using(Html.BeginForm("AddItem", "Home")) { %>
<label for="ItemID">Item:</label>
<%= Html.DropDownList("ItemID", Model.ItemsList) %>
<%= Html.Hidden("WorkstationID", Model.Workstation.RecordID) %>
<input type="submit" value="Submit" />
<% } %>
</p>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddItem(FormCollection formValue)
{
long workstationId = Convert.ToInt64(formValue["WorkstationID"]);
long itemId = Convert.ToInt64(formValue["ItemID"]);
Workstation workstation = itilRepository.FindWorkstation(workstationId);
Item item = itilRepository.FindItem(itemId);
itilRepository.AddItem(workstation, item);
itilRepository.Save();
return Content("Item added successfully!");
}
Ce que je veux faire est d'être en mesure de soumettre les deux paramètres de la workstationId et itemId pour le contrôleur en utilisant Ajax.ActionLink et la nouvelle élément qui a été ajouté obtenir inséré dans la grille. Je suis rendu la grille comme ceci:
<table>
<tr>
<th></th>
<th>
Name
</th>
<th>
Service Tag
</th>
<th>
Serial Number
</th>
</tr>
<% foreach (var item in Model.Items) { %>
<tr>
<td>
<%= Html.ActionLink("Edit", "ItemEdit", new { id = item.RecordID }) %> |
<%= Html.ActionLink("Details", "ItemDetails", new { id = item.RecordID })%>
</td>
<td>
<%= Html.Encode(item.Name) %>
</td>
<td>
<%= Html.Encode(item.ServiceTag) %>
</td>
<td>
<%= Html.Encode(item.SerialNumber) %>
</td>
</tr>
<% } %>
</table>
Le problème que j'ai c'est quand je soumettre à l'aide de la ActionLink je ne peux pas comprendre comment passer des paramètres à la commande et comment mettre à jour la grille sans recharger la totalité de la vue.
Je voudrais vraiment l'apprécier un peu d'aide avec cela ou même un lien vers un des tutoriels qui fait la même chose.
Merci!
C'est la version de travail, le seul problème est que lorsque le contrôleur retourne la vue partielle qui est tout ce qui est rendred la page actuelle est disparu.
<% using (Ajax.BeginForm("AddItem", null,
new AjaxOptions
{
UpdateTargetId = "ResultsGoHere",
InsertionMode = InsertionMode.Replace
},
new { @id = "itemForm" } ))
{ %>
<label for="ItemID">Item:</label>
<%= Html.DropDownList("itemId", Model.ItemsList) %>
<%= Html.Hidden("workstationId", Model.Workstation.RecordID) %>
<a href="#" onclick="$('#itemForm').submit();">Submit</a>
<div id="ResultsGoHere">
<% Html.RenderPartial("WorkstationItems", Model.Items); %>
</div>
<% } %>
Pas sûr de ce que la cause en est, le remplacer fonctionnait correctement avant, mais le contrôleur n'était pas d'obtenir la liste déroulante valeur. Maintenant, le contrôleur est l'obtention de la valeur, mais la vue partielle qui est retourné remplace la totalité de la page.
De La Méthode D'Action:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddItem(string workstationId, string itemId)
{
long lworkstationId = Convert.ToInt64(workstationId);
long litemId = Convert.ToInt64(itemId);
Workstation workstation = itilRepository.FindWorkstation(lworkstationId);
Item item = itilRepository.FindItem(litemId);
IQueryable<Item> items = itilRepository.AddItem(workstation, item);
itilRepository.Save();
return PartialView("WorkstationItems", items);
}
C'est le code HTML pour l'Affichage, qui fait tout le travail:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ITILDatabase.Models.WorkstationFormViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Workstation Details
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<link type="text/css" href="/../Content/css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
<script type="text/javascript" src="/../Content/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/../Content/js/jquery-ui-1.7.2.custom.min.js"></script>
<h2>
Workstation Details</h2>
<fieldset>
<legend>Fields</legend>
<p>
Record ID:
<%= Html.Encode(Model.Workstation.RecordID) %>
</p>
<p>
Name:
<%= Html.Encode(Model.Workstation.Name) %>
</p>
<p>
Description:
<%= Html.Encode(Model.Workstation.Description) %>
</p>
<p>
Site:
<%= Html.Encode(Model.Workstation.Site.Name) %>
</p>
<p>
Modified By:
<%= Html.Encode(Model.Workstation.ModifiedBy) %>
</p>
<p>
Modified On:
<%= Html.Encode(String.Format("{0:g}", Model.Workstation.ModifiedOn)) %>
</p>
<p>
Created By:
<%= Html.Encode(Model.Workstation.CreatedBy) %>
</p>
<p>
Created On:
<%= Html.Encode(String.Format("{0:g}", Model.Workstation.CreatedOn)) %>
</p>
</fieldset>
<fieldset>
<legend>People</legend>
<% Html.RenderPartial("WorkstationPeople", Model.People); %>
</fieldset>
<fieldset>
<legend>Positions</legend>
<% Html.RenderPartial("WorkstationPositions", Model.Positions); %>
</fieldset>
<fieldset>
<legend>Items</legend>
<% using (Ajax.BeginForm("AddItem", "Home", null,
new AjaxOptions
{
UpdateTargetId = "ResultsGoHere",
InsertionMode = InsertionMode.Replace
},
new { @id = "itemForm" } ))
{ %>
<label for="ItemID">Item:</label>
<%= Html.DropDownList("itemId", Model.ItemsList) %>
<%= Html.Hidden("workstationId", Model.Workstation.RecordID) %>
<a href="#" onclick="$('#itemForm').submit();">Submit</a>
<div id="ResultsGoHere">
<% Html.RenderPartial("WorkstationItems", Model.Items); %>
</div>
<% } %>
</fieldset>
<br />
<p>
<%=Html.ActionLink("Edit", "WorkstationEdit", new { id = Model.Workstation.RecordID }) %>
|
<%=Html.ActionLink("Back to List", "Index") %>
</p>
</asp:Content>
source d'informationauteur Lukasz
Vous devez vous connecter pour publier un commentaire.
Quels résultats attendez-vous de l'appel AJAX?
Vous pouvez utiliser le
AjaxHelper
de l'objet de méthodes d'assistance à la place de laHtmlHelper
pour rendre le lien. Par exemple, pour obtenir de nouveaux contenus avec un AJAX HttpPOST appel et de l'insérer dans un<div>
avec l'id défini àResultsGoHere
vous rendre sur le lien suivant:Dans votre
AcionMethod
vous pouvez simplement tester surRequest.IsAjaxRequest()
de décider ce qu'il doit retourner:C'est comment vous pouvez le faire en utilisant le
Ajax.BeginForm()
plutôt la méthode:Veuillez noter que le code est dans son état actuel, en aucune façon, entièrement fonctionnel, la dropdownlists ne pas obtenir leurs articles à partir de n'importe où, il n'y a pas de
<div>
de prendre soin de résultats de la requête AJAX, et leonclick
attribut sur le lien qui soumet le formulaire, jQuery est inclus (dans ce cas, il est préférable de donner le lien d'un identifiant et d'ajouter unclick()
gestionnaire d'événement à partir d'une autrejs
fichier...)EDIT: Oh, et je n'ai pas vérifié que c'est OK pour passer un
null
de la valeur à larouteValues
paramètre. Si non, il suffit d'alimentation du contrôleur et des noms d'action, et vous serez amende.comment pouvez-vous passer le modèle de la vue à la post créer l'action du contrôleur à l'aide d'ajax.actionlink?
Ce lien pourrait être utile
http://asp-net-csharp-vb.blogspot.com/2011/05/passing-data-in-aspnet-mvc-application.html
Ici, comme, à ma connaissance, nous pouvons transmettre les données à partir de l'Affichage de Contrôleur de deux façons...
À l'aide de
Formcollection
construit dans le mot comme ça..FormCollection
ne fonctionne que lorsque vous cliquez sur un bouton dans un formulaire. Dans d'autres cas, il ne contient que des données videL'aide d'un modèle de classe
C'est de cette façon vous serez en mesure d'envoyer plusieurs paramètres à travers actionLink.
Pour cette situation, veuillez consulter le code ci-dessous:
Répondre si cela fonctionne.