Avatar
Majkel
Člen
Avatar
Majkel:

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">
    @*@Html.ValidationSummary()*@
    @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. listopadu 11:40
Avatar
Odpovídá na Majkel
Michal Štěpánek:

Neměl by tento řádek

@*@Html.ValidationSummary()*@

vypadat spíš takto?

@Html.ValidationSummary()
Nahoru Odpovědět 5. listopadu 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:

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