Сценарий:
У частичного представления есть модель, мне нужно использовать значение из модели в javascript, который находится в отдельном файле.js.
В настоящее время я использую javascript inline, так что можно использовать значение в модели, но что, если javascript будет перемещен в отдельный файл. В этом случае, как мне получить эти значения.
Код
@model IEnumerable<BookSpec.DomainEntities.ContactModel.ContactDataModel>
<label for="SpecFinder">Contact</label>
<select id="SpecFinder" name="state">
@foreach (var name in Model)
{
<option value="@name.GroupID">@name.GroupName</option>
}
</select>
<script type="text/javascript">
$(document).ready(function () {
$("#SpecFinder").change(function(){
getData(this.value,'@Model.ProductID');
});
})
</script>
Это мой текущий пример кода выглядит, и я хочу полностью переместить встроенный javascript в отдельный файл. Как я могу это сделать, мне также нужны значения из модели.
Объявите глобальную model
переменных javascript, как показано ниже. Тогда вы можете использовать его в любом месте.
<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
</script>
Я рекомендую использовать вышеуказанное решение. Но если вы все же не хотите включать какой-либо скрипт в частичный вид, вы можете отобразить model
внутри любого скрытого div. И получить доступ к его тексту и преобразовать его в object
с помощью JSON.parse
как JSON.parse
ниже. Код, как показано ниже, не является хорошей практикой и похожей на работу патча.
HTML
<div id="model" style="display:none;">
@Html.Raw(Json.Encode(Model))
</div>
скрипт
var model = JSON.parse($("#model").text());
window
Я думаю, что ответ Karan - хороший вариант. Но если вы не хотите встроенного Javascript, вы можете присвоить свою модель скрытому вводу HTML и затем извлечь значение в любой другой внешний JS файл, который вы хотите.
С чем-то вроде Html.Hidden, например:
@Html.Hidden("myModel", new Microsoft.Web.Mvc.MvcSerializer().Serialize(model, SerializationMode.Signed));
Вы можете выбрать другой режим сериализации в перечислении SerializationMode.
(Код не пробовал, но должен быть близок)
data-productid
элемента