Ich versuche, ein Angular/Bootstrap-Modal zu verwenden, um MVC ApplicationUser-Gerüstansichten zu bearbeiten. Ich habe ein paar Beispiele gefunden, die meistens jQuery sind. Ich habe einen gefunden, der mit jquery-ui gut funktioniert. Ich möchte mit meinen Modalitäten konsistent sein, also muss ich es mit angular-ui oder einfachem Bootstrap arbeiten lassen. Ich bin nicht sicher, wie dies den MVC-Controller für die Datenbindung nennt.Wie MVC-Modell an ein UI-bootstrap Modal übergeben werden
Arbeits JQuery-ui Beispiel
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup({ cache: false });
$(".editDialog").live("click", function (e) {
var url = $(this).attr('href');
$("#dialog-edit").dialog({
title: 'Edit Customer',
autoOpen: false,
resizable: false,
height: 355,
width: 400,
show: { effect: 'drop', direction: "up" },
modal: true,
draggable: true,
open: function (event, ui) {
$(this).load(url);
},
});
$("#dialog-edit").dialog('open');
return false;
});
});
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.FullName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }, new { @class = "editDialog" })|
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
</td>
</tr>
}
</tbody>
<div id="dialog-edit" style="display: none"> </div>
Hier ist, wie ich Winkel verwenden, um eine modale mit einem API-Aufruf zu öffnen.
$scope.editLocation = function (id) {
$scope.close();
var deferred = $q.defer();
$http({ method: 'get', url: '/api/Locations/' + id })
.success(function (model) {
deferred.resolve(model);
$scope.model = model;
}).error(function (error) {
deferred.reject(error);
}).then(function() {
$modal.open({
templateUrl: "EditLocationModal.html",
controller: 'ModalInstanceController',
resolve: {
model: function() {
return $scope.model;
}
}
});
})
return deferred.promise;
}
UPDATE
$scope.editUser = function (id) {
$modal.open({
templateUrl: "Modals/ApplicationUserModal.html",
controller: 'ModalInstanceController',
resolve: {
model: function() {
return $scope.model;
}
}
});
};
Ansicht
<div class="card-body card-padding" ng-controller="ApplicationUserController">
<div class="table-responsive">
<table class="table table-striped table-vmiddle">
<thead>
<tr>
<th>Full Name</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.FullName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", null, new { ng_click = "editUser(item.Id)" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
UPDATE 2 Diese Syntax
@Html.ActionLink("Edit", "Edit", null, new { ng_click = "editUser(" + item.Id + ")" })
diesen Fehler zu werfen.
Error: [$parse:syntax] Syntax Error: Token 'bc05f5' is unexpected, expecting [)] at column 12 of the expression [editUser(87bc05f5-35c2-4278-a528-b7e237922d4e)] starting at [bc05f5-35c2-4278-a528-b7e237922d4e)]. http://errors.angularjs.org/1.3.15/ $parse/syntax?p0=bc05f5&p1=is%20unexpected%2C%20expecting%20%5B)%5D&p2=12&p3=editUser(87bc05f5-35c2-4278-a528-b7e237922d4e)&p4=bc05f5-35c2-4278-a528-b7e237922d4e)
können Sie mir zeigen, wie man es in einer Direktive macht? danke – texas697
Siehe meine aktualisierte Antwort und sehen, ob das für Sie funktioniert. Wenn Sie unbedingt eine ganze URL laden müssen wie jQuery, benötigen Sie einen iframe in Ihrem Modal und das scheint einfach unnötig zu sein. – Jan
es macht definitiv mehr Sinn, wie es funktioniert, aber ich bin immer noch nicht sicher, wie man das jquery-ui modal mit einem Bootstrap modal ersetzen – texas697