У меня есть элемент управления голосованием с несколькими кнопками. Это реализовано с использованием Ajax.BeginForm
со скрытым полем с именем voteTypeHidden
. Каждый раз, когда нажимается любая из кнопок голосования, она изменяет значение voiceTypeHidden, чтобы обновить тип голосования. Эта форма отправляется на сервер, и он сообщает о любой ошибке, используя ViewState["VoteError"
]. Теперь я хочу отобразить эту ошибку, используя мою функцию javascript.
ModalDialog(button, text, fadeOut)
Как это сделать? Очень важно, чтобы текстовый параметр, передаваемый функции ModalDialog, был ViewState["VoteError"].
Кстати, это не обязательно, но я также разместил код, который использую.
Вот javascript:
<script type = "text/javascript">
var voteClickEnabled = true;
function voteClicked_Set(value) {
var voteType = value;
document.getElementById("voteTypeHidden").setAttribute("value", value);
}
function voteBegin() {
//alert("begin");
if (voteClickEnabled == false) {
return false;
}
else {
voteClickEnabled = false;
return true;
}
}
function voteEnd() {
//alert("end");
voteClickEnabled = true;
}
</script>
Вот вид:
<div id = "updateVotes">
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
Favorite :
<%=Html.Encode(ViewData["FavoriteCount"]) %>
<%//if(((int)ViewData["VoteBits"] & 1) == 0)
{%>
<% using (Ajax.BeginForm("Voting", "Vote", new {voted = ViewData["voted"], favorited = ViewData["favorited"], markedspam = ViewData["markedspam"], VotingOnId = (long)ViewData["VotingOnId"], VoteOn = (int)ViewData["VoteOn"], num_votes = 0, num_favorite = (int?)ViewData["FavoriteCount"], sdg = (int?)ViewData["sdg"], category = (int?)ViewData["category"] }, new AjaxOptions { UpdateTargetId = "updateVotes", OnBegin = "voteBegin", OnComplete = "voteEnd" }))
{%>
<%=Html.Hidden("voteTypeHidden", "temp", new { id = "voteTypeHidden" })%>
<%if ((bool)ViewData["voted"] == false)
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/thumb_up.png"), new {value = "1", onclick = "voteClicked_Set(this.value)" })%>
<%}
else
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/cancel.png"), new { value = "2", onclick = "voteClicked_Set(this.value)" })%>
<%} %>
<%if ((bool)ViewData["favorited"] == false)
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/star_off_32.png"), new { value = "3", onclick = "voteClicked_Set(this.value)" })%>
<%}
else
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/star_32.png"), new { value = "4", onclick = "voteClicked_Set(this.value)" })%>
<%} %>
<%if ((bool)ViewData["markedspam"] == false)
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/error.png"), new { value = "5", onclick = "voteClicked_Set(this.value)" })%>
<%}
else
{ %>
<%=Html.SubmitImage("voteButton", Url.Content("/Images/error_go.png"), new { value = "6", onclick = "voteClicked_Set(this.value)" })%>
<%} %>
<%}%>
<%}%>
<div id = "testingAjax">
</div>
<% if (!string.IsNullOrEmpty((string)ViewData["VoteError"])) { %>
<script type = "text/javascript">
ModalDialog("testingAjax", "asd", false);
</script>
<%} %>
</div>
1 ответ
Просто сделайте обычное изображение кнопки html с одним и тем же классом, но вы используете атрибут html, скажем, data-votetype=""
Поместите скрытый div в верхней части страницы под названием «результаты» или «обратная связь» или что-то в этом роде, основываясь на идее, что класс кнопки — это голосование:
$('.vote').live("click",function(e){
var voteType = $(this).attr("data-votetype");
// do post to JsonResults
$.ajax(
url: "",
type:"POST",
data:{id:$("#idfield").val(),votetype:voteType},
dataType:"json",
success: function(data){
$("#feedback").html(data.Message).show();
},
error:function(a,b,c){ $("#feedback").html("Error description: " + b).show(); }
);
});
Если вы собираетесь работать с ajax, вы также можете работать с моделью данных, для которой она предназначена, и это ответ JSON, пример кода:
public class JsonResponseModel {
public bool Success {get;set;}
public string Message {get;set;}
}
public JsonResults CastVote(int id, int votetype){
var model = new JsonREsponseModel{ Success = false };
// do code in try catch. change model to reflect success and message
return Json(model);
}
Похожие вопросы
Новые вопросы
ajax
AJAX (асинхронный JavaScript и XML) — это метод создания интерактивных пользовательских интерфейсов веб-сайтов без традиционного обновления или перезагрузки веб-страницы. Он использует асинхронный обмен данными между клиентом и сервером, чтобы обновлять отображаемую информацию и беспрепятственно реагировать на взаимодействие с пользователем. Включите дополнительные теги для языков программирования, библиотек, фреймворков, веб-браузеров, протоколов и другой информации об окружающей среде.