Question

J'écris quelques ajouts à un site basé monorail Castle impliquant un Ajouter et une forme Modifier. Le formulaire d'ajout fonctionne très bien et utilise la méthode POST, mais la forme d'édition utilise la méthode GET. La seule différence importante est que je peux voir que la méthode d'édition est appelée avec l'identifiant de l'objet en cours de modification dans la chaîne de requête. Lorsque le bouton d'envoi est pressé sur le formulaire de modification, le seul argument est passé cet objet Id nouveau. Voici le code pour le formulaire d'édition:

<form action="edit.ashx" method="post">
<h3>Coupon Description</h3>
<textarea name="comments" width="200">$comments</textarea>
<br/><br/>
<h3>Coupon Actions</h3>
<br/>
<div>Give Stories</div>

<ul class="checklist" style="overflow:auto;height:144px;width:100%">
#foreach ($story in $stories.Values)
    <li>
    <label>
    #set ($associated = "")
    #foreach($storyId in $storyIds)
        #if($story.Id == $storyId)
            #set($associated = " checked='true'")
        #end
    #end
    <input type="checkbox" name="chk_${story.Id}" id="chk_${story.Id}" value="true" class="checkbox" $associated/>
    $story.Name
</label>
</li>
#end
</ul>
    <br/><br/>
<div>Give Credit Amount</div>
<input type="text" name="credit" value="$credit" />
<br/><br/>

<h3>Coupon Uses</h3>
<input type="checkbox" name="multi" #if($multi) checked="true" #end /> Multi-Use Coupon?<br/><br/>
<b>OR</b>
<br/>
<br/>
Number of Uses per Coupon: <input type="text" name="uses" value="$uses" />
<br/>

<input type="submit" name="Save" />

</form>

Les différences entre ceci et le formulaire d'ajout est la substance de vitesse à faire avec l'association et les valeurs des entrées étant du PropertyBag.

La méthode face à ce sur le contrôleur commence comme ceci:

public void Edit(int id)
{
    Coupon coupon = Coupon.GetRepository(User.Site.Id).FindById(id).Value;
    if(coupon == null) {
        RedirectToReferrer();
        return;
    }

    IFutureQueryOfList<Story> stories = Story.GetRepository(User.Site.Id).OnlyReturnEnabled().FindAll("Name", true);

    if (Params["Save"] == null)
    {
        ...
    }
}

Il se fiable appelé, mais un point d'arrêt sur les params [ « Enregistrer »] me laisse voir que le HttpMethod est « GET » et les seuls arguments passés (dans la forme et la demande) sont l'objet Id et en-têtes HTTP supplémentaires.

A la fin de la journée, je ne suis pas familier avec monorail et cela peut être une erreur stupide de ma part, mais je vous serais très reconnaissant de bien vouloir être fait un fou de si elle résout le problème! :)

Merci

Était-ce utile?

La solution

Je suis autour de cela en utilisant une méthode distincte sur le contrôleur pour faire face à l'enregistrement du coupon au lieu d'un bien pour le chargement de la forme et de traiter avec sa soumission.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top