Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: ASP.NET MVC Client Side validation, Ajax, PartialView

C# .NET .NET (C# a Visual Basic) ASP.NET MVC Client Side validation, Ajax, PartialView American English version English version

Aktivity (1)
Avatar
Majkel
Člen
Avatar
Majkel:5.11.2016 11:40

Ahoj, mám MVC aplikaci, kde načítám do View PartialView tímto způsobem:

<h2>Administration</h2>
@Ajax.ActionLink("Users", "Users", new AjaxOptions { UpdateTargetId = "result" })
@Ajax.ActionLink("Licenses", "Licenses", new AjaxOptions { UpdateTargetId = "result" })
<div id="users-administration"></div>


<div id="result"></div>

PartialView User vypadá takto:

@model LicenseWatcher_MVC.ViewModels.Administration.UsersViewModel

<form role="form" id="frmAddUser">
    @[email protected]()*@
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.LabelFor(m => m.Name)
        @Html.TextBoxFor(m => m.Name, new { @class = "form-control", @data_bind = "value: Name" })
        @Html.ValidationMessageFor(m => m.Name)
        @Html.LabelFor(m => m.Surname)
        @Html.TextBoxFor(m => m.Surname, new { @class = "form-control", @data_bind = "value: Surname" })
    </div>
    <input type="button" class="btn btn-default" value="Add User" data-bind="click: $root.addUser" />
</form>


<div>
    <table class="table table-bordered table-striped">
        <thead>
            <tr>
                <th>@Html.DisplayNameFor(model => model.Name)</th>
                <th>@Html.DisplayNameFor(model => model.Surname)</th>
                <th>Actions</th>
            </tr>
        </thead>

        <tbody data-bind="template: { name: currentTemplate, foreach: lookupCollection }" id="remoteCollection">
            <tr>
                <td> <span data-bind="text: Usr_Id" /></td>
                <td> <span data-bind="text: Name" /></td>
                <td> <span data-bind="text: Surname" /></td>
            </tr>
        </tbody>
    </table>
</div>

<script type="text/html" id="displayOnlyTemplate">
    <tr>
        <td>
            <span data-bind="text: Name"></span>
        </td>
        <td>
            <span data-bind="text: Surname"></span>
        </td>
        <td>
            <input type="button" class="btn btn-info" value="Edit" data-bind="click: $root.edit" />
            <input type="button" class="btn btn-danger" value="Delete" data-bind="click: $root.remove" />
        </td>
    </tr>
</script>

<script type="text/html" id="updateTemplate">
    <td>
        <input type="text" class="form-control" data-bind="value: Name" id="txtaddress" />
    </td>
    <td>
        <input type="text" class="form-control" data-bind="value: Surname" id="txthost" />
    </td>
    <td>
        <input type="button" class="btn btn-info" value="Save" data-bind="click: $root.save" />
        <input type="button" class="btn btn-info" value="Cancel" data-bind="click: $root.cancel" />
    </td>
</script>
<script src="~/Scripts/ViewModels/Administration/UsersViewModel.js"></script>

Property na Modelu UsersViewModel mají nastavený atribut [Required(Error­Message = "Vyplňte prosím jméno")] ale validace mi nechce fungovat. Když stejný kód umístím přímo do View, tak funguje bez problémů. Ale v PartialView se mi validaci rozchodit nedaří. Díky za rady.

 
Odpovědět 5.11.2016 11:40
Avatar
Odpovídá na Majkel
Michal Štěpánek:5.11.2016 13:29

Neměl by tento řádek

@[email protected]()*@

vypadat spíš takto?

@Html.ValidationSummary()
Nahoru Odpovědět 5.11.2016 13:29
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Majkel
Člen
Avatar
Odpovídá na Michal Štěpánek
Majkel:7.11.2016 17:32

Ahoj, @Html.Validati­onSummary() slouží pro souhrný výpis validačních chyb. Pokud chceš zobrazit validaci pouze pro daný textbox, nepotřebuješ to.

Aby fungovala validace na vloženém PartialView je potřeba nejprve:

// Znovu načte validaci pro PartialView
jQuery.validator.unobtrusive.parse();
jQuery.validator.unobtrusive.parse("#frmAddUser");

a následně v ajaxovém volání

// Validace pro PartialView
if (!$("#frmAddUser").valid()) {
    return false;
}

Pak to funguje :-)

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 7.11.2016 17:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.