asp.net-mvc 在 mvc4 中访问 javascript 中的临时数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15608146/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
access tempdata in javascript in mvc4
提问by Rahul Rajput
I am trying to access TempData in Javascript. but getting null value. I am making ajax call to Update the record and i want to display Record updated succesfully message. which will come from UpdateOperation action from the controller. but currently it will display null value. I also check with Firebug it shows as follows:
我正在尝试在 Javascript 中访问 TempData。但得到空值。我正在使用 ajax 调用更新记录,我想显示记录更新成功消息。这将来自控制器的 UpdateOperation 操作。但目前它将显示空值。我还检查了 Firebug,它显示如下:
function onComplete(e) {
if (e.name == "update") {
alert('');
}
Here is my code of controller
这是我的控制器代码
public class OperationController : BaseController
{
/// <summary>
/// Index action will return template view of the page without data
/// </summary>
/// <returns>Blank Action</returns>
public ActionResult Index()
{
return this.View();
}
/// <summary>
/// Get all Operation from System
/// </summary>
/// <returns>return action result</returns>
[GridAction]
public ActionResult SelectOperation()
{
IEnumerable<OperationEntity> operationList = OperationComponent.GetAll();
return this.View(new GridModel(operationList));
}
/// <summary>
/// Method for update operation
/// </summary>
/// <param name="entity">moduleViewModel to update Module</param>
/// <returns>return action result</returns>
[GridAction]
public ActionResult UpdateOperation(OperationEntity entity)
{
if (ModelState.IsValid)
{
entity.Log = new BusinessCore.BusinessEntities.LogDetails();
entity.Log.ModifiedBy = SessionHelper.UserId;
Status status = OperationComponent.Update(entity);
this.TempData["AlertMessage"] = status.Message;
this.ViewData["_AlertMessage"] = status.Message;
return this.View(new GridModel(OperationComponent.GetAll()));
}
else
{
return this.View(entity);
}
}
}
In my view
在我看来
@using Telerik.Web.Mvc.UI;
@{
ViewBag.Title = "Operation List";
}
<h2>@ViewBag.Title</h2>
<script src="../../../../Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
// function onSave(e) {
// alert('Record Save Succesfully');
// }
function onComplete(e) {
if (e.name == "update") {
alert('@TempData["AlertMessage"]');
alert('@ViewData["_AlertMessage"]');
}
if (e.name == "insert") {
alert("Operation Inserted Successfully");
}
if (e.name == "delete") {
alert("Operation Deleted Successfully");
}
}
function newAlert(type, message) {
if (message != "" || message != null) {
$("#alert-area").append($("<div class='alert alert-success " + type + " fade in' data-alert><p><b> " + message + " </b></p></div>"));
$(".alert-success").delay(4000).fadeOut("slow", function () { $(this).remove(); });
}
}
</script>
@(Html.Telerik().Grid<QuexstERP.BusinessCore.BusinessEntities.SysAdmin.OperationEntity>()
.Name("Grid")
.DataKeys(keys =>
{
keys.Add(p => p.Id);
})
.ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Image).ImageHtmlAttributes(new { style = "margin-left:0", title = "Add" }))
.DataBinding(dataBinding =>
{
dataBinding.Ajax()
.Select("SelectOperation", "Operation")
.Insert("InsertOperation", "Operation")
.Update("UpdateOperation", "Operation")
.Delete("DeleteOperation", "Operation");
})
.Columns(columns =>
{
columns.Command(commands =>
{
commands.Edit().ButtonType(GridButtonType.Image).HtmlAttributes(new { title = "Edit" });
commands.Delete().ButtonType(GridButtonType.Image).HtmlAttributes(new { title = "Delete" });
}).Width(80).Title("Commands");
columns.Bound(p => p.Name).Width(200).Title("Operation Name");
columns.Bound(p => p.Description).Width(310).Title("Description");
})
.ClientEvents(events => events
.OnComplete("onComplete")
)
.Editable(editing => editing.Mode(GridEditMode.PopUp).InsertRowPosition(GridInsertRowPosition.Top))
.Pageable()
.Scrollable()
.Sortable()
.Filterable()
)
@section HeadContent {
<style type="text/css">
.field-validation-error
{
position: absolute;
display: block;
}
* html .field-validation-error { position: relative; }
*+html .field-validation-error { position: relative; }
.field-validation-error span
{
position: relative;
white-space: nowrap;
color: red;
padding: 10px 5px 3px;
background: transparent url('@Url.Content("~/Content/Common/validation-error-message.png") ') no-repeat 0 0;
}
/* in-form editing */
.t-edit-form-container
{
width: 480px;
margin: 1em;
}
.t-edit-form-container .editor-label,
.t-edit-form-container .editor-field
{
padding-bottom: 1em;
float: left;
}
.t-edit-form-container .editor-label
{
width: 25%;
text-align: right;
padding-right: 3%;
clear: left;
}
.t-edit-form-container .editor-field textarea
{
font-size:11px;
width:80%;
}
.t-edit-form-container .editor-field
{
width: 70%;
}
</style>
}
回答by durbo
I know its an old question but i thought i'd answer as I was looking for the exact same solution and hopefully help some others out.
我知道这是一个老问题,但我想我会回答,因为我正在寻找完全相同的解决方案,并希望能帮助其他人。
This solved it for me how-to-get-the-tempdata-in-javascript
这为我解决了how-to-get-the-tempdata-in-javascript
Essentially, Your syntax is missing brackets
本质上,您的语法缺少括号
//Your code
alert('@TempData["AlertMessage"]');
// Correct code
alert('@(TempData["AlertMessage"])');
The bracket after the @
@后面的括号
Hope this helps the next searcher like me.
希望这有助于像我这样的下一个搜索者。
回答by Jeyhun Rahimov
TempDataused when redirect to action. Try ViewBag.
TempData重定向到动作时使用。试试ViewBag。
In controller:
在控制器中:
ViewBag.AlertMessage = status.Message;
In view:
鉴于:
@{
ViewBag.Title = "Operation List";
string alert = "Your custom error message";
if(ViewBag.AlertMessage != null)
{
alert = (string)ViewBag.AlertMessage;
}
}
and javascript
和 javascript
var jsAlert = '@alert';
alert(jsAlert );

