Проверка формы ASP.net mvc во вкладке Jquery - PullRequest
1 голос
/ 06 марта 2012

У меня есть простой веб-сайт mvc ASP.net, который использует вкладки Jquery для размещения содержимого.На одной из вкладок я отображаю PartialView, который привязан к его собственной модели, которая позволяет пользователю обновлять детали своей настройки системы.Вот часть визуализируемого частичного представления:

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(of SystemSetupViewModel)" %>
 <% Using Html.BeginForm("UsrCtlSystemSetup", "User", FormMethod.Post)%>  
 <%: Html.ValidationSummary(True, "Invalid details supplied.")%>     
 <div class="tabDynamicHeight ">
 <div class="FormFullRow formLayoutLabel">

  <div class="Seperator">
<div class="FormFullRow longInput">
    <%: Html.LabelFor(Function(model) model.WebsiteAddress)%>
<%: Html.TextBoxFor(Function(model) model.WebsiteAddress)%>
<%: Html.ValidationMessageFor(Function(model) model.WebsiteAddress)%>  
</div>                                 
<small class="helpText FullRow">Your Companies Website     Address.</small>                                                       
</div> 

 </div>

   <div class="FloatButtonLeft">
           <input type="submit" value="Save" class="FloatButtonLeft BlueBtnMedium" />  
     </div>

 </div>
   <% End Using %>

И это метод отправки:

  <HttpPost()> _
    <ValidateInput(False)> _
    Public Function UsrCtlSystemSetup(ByVal btnSubmit As String, ByVal model As SystemSetupViewModel) As ActionResult            
        model.SaveChanges()
        Return PartialView("UsrCtlSystemSetup", model)
    End Function

У меня проблема в том, что должно быть возвращено из этого метода.Возврат частичного вида просто возвращает частичный вид, который занимает всю страницу.Мне нужно как-то просто вернуть частичное представление обратно на вкладку jquery.Это возможно?Я мог бы выполнить RedirectToAction назад к действию родительской страницы, но это означало бы, что если в представляемой модели частичных представлений есть ошибки, я не смогу ее показать.Надеюсь, что это имеет смысл.

Заранее спасибо

1 Ответ

0 голосов
/ 06 марта 2012

Я предполагаю, что вы хотели бы получить частичные обновления и проверку вашего помощника по форме UsrCtlSystemSetup?В этом случае вместо использования помощника Html.BeginForm вместо него можно использовать помощник Ajax.BeginForm .С помощью помощника Ajax.BeginForm вы можете указать элемент DOM (через его идентификатор), который будет обновляться с помощью представления, возвращаемого действием отправки формы, без полной обратной отправки.Вот пример вашего кода с использованием синтаксиса Razor:

@using (Ajax.BeginForm("UsrCtlSystemSetup", "User", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "resultDiv", HttpMethod = "Post", OnSuccess = "AjaxDone" }, new { @id = "myFormId" }))
{
    <div id="resultDiv">
        @Html.ValidationSummary(True, "Invalid details supplied.")     
        <div class="tabDynamicHeight ">
            <div class="FormFullRow formLayoutLabel">
                <div class="Seperator">
                    <div class="FormFullRow longInput">
                        @Html.LabelFor(Function(model) model.WebsiteAddress)
                        @Html.TextBoxFor(Function(model) model.WebsiteAddress)
                        @Html.ValidationMessageFor(Function(model) model.WebsiteAddress) 
                    </div>                                 
                <small class="helpText FullRow">Your Companies Website     Address.</small>                                                       
                </div> 
            </div>
            <div class="FloatButtonLeft">
                <input type="submit" value="Save" class="FloatButtonLeft BlueBtnMedium" />  
            </div>
        </div>
    </div>
}

А вот ваша реализация контроллера в C #:

    [HttpPost]
    public ActionResult UsrCtlSystemSetup(SystemSetupViewModel model)
    {
        try
        {
            if (ModelState.IsValid)
            {
                // Add implementation for when your model state is valid
                // I assumed a UsrCtlSystemSetupSuccess View to indicate that the form 
                // submit was parsed successfully
                return PartialView("UsrCtlSystemSetupSuccess", model)
            }
            else
            {
                // Add implementation for when your model state is NOT valid
                return PartialView("UsrCtlSystemSetup", model);
            }
        }
        catch
        {
            // Handle errors...
            return PartialView("UsrCtlSystemSetup", model);
        }
    }

При такой установке среда Asp.Net обновится *Содержимое 1009 * с PartialView, возвращаемое действием UsrCtlSystemSetup с использованием ajax.Я полагаю, что это то, чего вы хотите достичь?

В качестве альтернативы, вы можете отказаться от помощников Ajax Asp.Net и просто использовать jQuery для вызова ajax-вызова на сервер, получить ответ и самостоятельно сгенерировать html.на клиенте или сервере.Но поскольку вы уже используете формы и функции проверки Asp.net, фреймворк наверняка будет работать лучше.

...