Монорельс - отправка формы с использованием GET вместо POST

Я пишу некоторые дополнения к сайту на основе Castle MonoRail, включая формы добавления и редактирования. Форма добавления работает нормально и использует POST, но форма редактирования использует GET. Единственное существенное различие, которое я вижу, заключается в том, что метод редактирования вызывается с идентификатором редактируемого объекта в строке запроса. Когда в форме редактирования нажимается кнопка отправки, единственный передаваемый аргумент - это снова этот идентификатор объекта. Вот код формы редактирования:

<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>

Различия между этой формой и формой добавления - это скорость, связанная с ассоциацией, и значения входных данных, взятых из PropertyBag.

Метод, работающий с этим на контроллере, начинается так:

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)
    {
        ...
    }
}

Он надежно вызывается, но точка останова в Params ["Save"] позволяет мне видеть, что HttpMethod - это "GET", а единственные переданные аргументы (в форме и запросе) - это идентификатор объекта и дополнительные заголовки HTTP.

В конце концов, я не так хорошо знаком с MonoRail, и это может быть глупой ошибкой с моей стороны, но я был бы очень признателен, если бы меня выставили дураком, если это решит проблему! :)

Спасибо


person Septih    schedule 22.12.2010    source источник
comment
Я вижу некоторые неправильные вещи в этом коде, но в чем конкретная проблема?   -  person Mauricio Scheffer    schedule 22.12.2010
comment
Можете ли вы опубликовать фактический URL-адрес GET?   -  person jishi    schedule 26.12.2010


Ответы (1)


Я обошел это, используя отдельный метод на контроллере для сохранения купона вместо одного как для загрузки формы, так и для обработки ее отправки.

person Septih    schedule 04.01.2011