@for (int i = 0, count = Model.Count; i < count; ++i)
{
@Html.TextAreaFor(m => m[i].Html, new { @class = "Width500", @style = "height:130px;" })
}
public class HistoryItem
{
public double X { get; set; }
public double Y { get; set; }
public string Operation { get; set; }
// предполагается, что журнал подразумевает хранение истории вычислений,
// и хотя можно повторно провести вычисления, в журнале такого по идее быть не должно,
public double Result { get; set; }
}
// ...
public static List<HistoryItem> History = new List<HistoryItem>();
// ...
History.Add(new HistoryItem { X = 123, Y = 456, Operation = "+", Result = 579 });
History.Add(new HistoryItem { X = 5, Y = 5, Operation = "*", Result = 25 });
public static List<string> History = new List<string>();
// ...
History.Add("2 * 2 = 4");
History.Add("3 + 4 = 7");
using System.Collections.Concurrent;
// ...
public static ConcurrentBag<string> History = new ConcurrentBag<string>();
// ...
History.Add("123 + 345 = 468");
History.Add("7 * 7 = 49");
// добавить
System.IO.File.AppendText("history.log", "5 * 5 = 25");
// прочитать историю
// System.IO.File.ReadAllText("history.log");
var historyData = window.localStorage.getItem('history');
var history = historyData ? JSON.parse(historyData) : [];
history.push('1 + 1 = 2');
history.push('2 + 2 = 4');
history.push('4 + 4 = 8');
window.localStorage.setItem('history', JSON.stringify(history));
Мне интересно в какой сфере применяют ASP
<asp:LinkButton ID="lnkPrev"
Text="Назад"
RunAt="server"
OnClick="lnkPrev_Click"
/>
<asp:Image ID="Image1"
ImageUrl="~/img/1.jpg"
RunAt="server"
/>
<asp:LinkButton ID="lnkNext"
Text="Вперёд"
RunAt="server"
OnClick="lnkNext_Click"
/>
protected void lnkPrev_Click(object sender, EventArgs e)
{
// получаем список файлов в папке ~/img
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
// текущий путь берем из Image1.ImageUrl
var currentPath = Server.MapPath(Image1.ImageUrl);
// ищем текущий путь среди полученных файлов
int index = Array.IndexOf(files, currentPath);
// проверяем, нашлось что-то или нет
if (index != -1)
{
// проверяем, можно получить предыдущий файл или нет
if (index - 1 > 0)
{
// можно, берем его
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index - 1]));
}
else
{
// нельзя, берем последний из списка
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[files.Length - 1]));
}
}
}
protected void lnkNext_Click(object sender, EventArgs e)
{
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
var currentPath = Server.MapPath(Image1.ImageUrl);
int index = Array.IndexOf(files, currentPath);
if (index != -1)
{
// проверяем, есть файлы впереди или нет
if (files.Length > index + 1)
{
// есть, берем следующий файл
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index + 1]));
}
else
{
// нет, берем первый из списка
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[0]));
}
}
}
<asp:LinkButton ID="lnkPrev"
Text="Назад"
RunAt="server"
CommandArgument="-1"
OnClick="LinkButton_Click"
/>
<asp:Image ID="Image1"
ImageUrl="~/img/1.jpg"
RunAt="server"
/>
<asp:LinkButton ID="lnkNext"
Text="Вперёд"
RunAt="server"
CommandArgument="1"
OnClick="LinkButton_Click"
/>
protected void LinkButton_Click(object sender, EventArgs e)
{
var lnk = (LinkButton)sender;
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
var currentPath = Server.MapPath(Image1.ImageUrl);
int index = Array.IndexOf(files, currentPath);
// если подумать, то этот блок кода можно уменьшить
if (index != -1)
{
if (lnk.CommandArgument == "1")
{
if (files.Length > index + 1)
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index + 1]));
}
else
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[0]));
}
}
else
{
if (index - 1 > 0)
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index - 1]));
}
else
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[files.Length - 1]));
}
}
}
}
@{
var grid = new WebGrid(/*...*/);
}
@grid.GetHtml(mode: WebGridPagerModes.Numeric, numericLinksCount: 10)
или отдельно список страниц:
@grid.Pager(numericLinksCount: 10)
public IHtmlString GetHtml( string tableStyle, string headerStyle, string footerStyle, string rowStyle, string alternatingRowStyle, string selectedRowStyle, string caption, bool displayHeader, bool fillEmptyRows, string emptyRowCellValue, IEnumerable<WebGridColumn> columns, IEnumerable<string> exclusions, WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount, Object htmlAttributes )
numericLinksCount
Тип: System.Int32
Число цифровых ссылок на ближайшие страницы WebGrid. Текст каждой цифровой ссылки на страницу содержит номер страницы. Задайте флаг Numeric параметра mode, чтобы эти элементы управления отображались на странице.
public HelperResult Pager( WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount )
numericLinksCount
Тип: System.Int32
Число отображаемых цифровых ссылок на страницы. По умолчанию используется значение 5.
HttpContext.Current.Response.RedirectToRoute
(
new
{
controller = "Home",
action = "Index"
}
);
var routeData = ((System.Web.Mvc.MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData;
var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext);
var url = urlHelper.Action("Index", "Home");
response.AddHeader("Content-Disposition", "attachment; filename='" + file.Name + "';");
// или
// response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\";");
<p>
<span class="datetime">
@Html.GetDateTime(DateTime.Now)
</span>
</p>
<p>
<span class="datetime" data-timestamp="@Html.GetTimestamp()">
@Html.GetDateTime(DateTime.Now)
</span>
</p>
<p>Метод <b>Html.GetDateTime</b> вполне может возвращать дату в тегах, тогда будет:</p>
<p>@Html.GetDateTime(DateTime.Now)</p>
<p>а на выходе может быть:<p>
<p>
<span class="datetime" data-timestamp="123">
15.11.2016 21:11:21
</span>
</p>
<p>
<b>timestamp</b> - позволит обойти проблему с форматированием,
при расчете времени на стороне клиента.
</p>
class ApiAccess : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext == null)
{
throw new ArgumentNullException("actionContext");
}
if (!this.IsAuthorized(actionContext))
{
return;
}
}
protected override bool IsAuthorized(HttpActionContext actionContext)
{
bool isAuthroized = base.IsAuthorized(actionContext);
// логика проверки доступа
IEnumerable<string> authItems;
if (actionContext.Request.Headers.TryGetValues("Authorization", out authItems))
{
var auth = authItems.First().Split(' ');
var token = service.GetToken(auth.Last());
// ...
}
return isAuthroized;
}
}
[ApiAccess]
public class FileServerController : ApiController
{
// ...
}
let url = '/методAPI';
let data = {}; // параметры запроса
let headers = {
'Authorization': 'ANYNAMEHERE ' + sessionStorage.getItem('token')
};
$.ajax({
cache: false,
processData: false,
type: 'POST',
url: url,
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(data),
headers: headers,
success: (result) => {
// успех
},
error: (x, textStatus, errorThrown) => {
// ошибка
// на сервер можно сделать исключение для плохих маркеров доступа
// и проверить, если responseText содержит данный тип исключения,
// то требовать у пользователя повторную авторизацию
if (x.responseText) {
let exception = JSON.parse(x.responseText);
// AccessDeniedException - тип исключения в WebAPI,
// (скорее всего полное имя типа придется указывать)
if (exception.ExceptionType == 'AccessDeniedException') {
// ...
}
}
}
});
var grid, dialog;
grid = $('#grid').grid({
// ваш url, который будет передавать данные из вашей бд
dataSource: '/Grid/GetPlayers',
uiLibrary: 'bootstrap',
// имена полей, которые следует выводить в таблице
columns: [
{ field: 'ID', width: 32 },
{ field: 'Name', sortable: true },
{ field: 'PlaceOfBirth', title: 'Place Of Birth', sortable: true }
],
pager: { limit: 5, sizes: [2, 5, 10, 20] }
});
Update-Package –reinstall
[HttpPost]
public JsonResult GetAccounts(int page, int limit)
{
using (var context = new Database1Entities())
{
// получаем записи для указанной страницы
var result = context.Account.OrderBy(
row => row.AccountID
).Skip((page - 1) * limit).Take(limit).ToArray();
int total = context.Account.Count();
// возвращаем json
return Json(new { records = result, total = total });
}
}
grid = $('#grid').grid({
// ссылка на действие GetAccounts в контроллере Home
// запрос выполняется методом POST
dataSource: { url: '/Home/GetAccounts', method: 'POST' },
uiLibrary: 'bootstrap',
columns: [
{ field: 'AccountID', sortable: true },
{ field: 'FirstName', sortable: true },
{ field: 'LastName', sortable: true },
{ field: 'Company', sortable: true },
{ field: 'Position', sortable: true }
],
pager: { limit: 2, sizes: [2, 5, 10, 20] }
});
http://localhost:11733/meropriyatia
http://localhost:11733/meropriyatiavnikolaeve
routes.MapRoute(
"meropriyatiavnikolaeve", // имя
"meropriyatiavnikolaeve", // шаблон
new { controller = "Home", action = "meropriyatiavnikolaeve" }
);
public class NewModel
{
public IEnumerable<City> CitiesList { get; set; }
public City City { get; set; }
}
@model NewModel
@foreach(var city in Model.CitiesList)
{
// список
}
@Model.City.КакоетоСвойство
@model NewMode
@Html.Partial("CitiesList", Model.CitiesList)
@Html.Partial("CityEditor", Model.City)
@model IEnumerable<City>
// ...
@model City
// ...
interface ILoginForm
{
void WebDocumentLoaded(System.Windows.Forms.WebBrowser webBrowser, Uri url);
}
if (typeof(ILoginForm).IsAssignableFrom(this.GetType()))
{
this.CanLogin = false;
Debug.WriteLine("ILoginForm", "LoginForm");
((ILoginForm)this).WebDocumentLoaded(this.webBrowser1, e.Url);
}
export interface ILocalization {
Loading: string;
LoadingFileContents: string;
// ...
}
export class RU implements ILocalization {
public Loading: string = 'Загрузка...';
public LoadingFileContents: string = 'Получение содержимого файла...';
// ...
}
interface IDBClient
{
public function ExecuteNonQuery();
public function ExecuteScalar();
public function GetRow();
// ...
}
// реализация метода ToInt32
public int ToInt32(IFormatProvider provider)
{
// если пусто, возвращаем ноль
if (!this.HasValue) { return 0; }
// если что-то есть, извлекаем числа и пробуем вернуть int32
return Convert.ToInt32(OAuthUtility.GetNumber(this.Data));
}
public bool SupportRevokeToken { get; protected set; }
public bool SupportRefreshToken { get; protected set; }
public GoogleClient(string clientId, string clientSecret) : base(/*...*/)
{
// ...
base.SupportRevokeToken = true;
base.SupportRefreshToken = true;
}
export interface ILoginState {
Username?: string;
Password?: string;
// ...
}
export default class Index extends Page<any, ILoginState> {
constructor() {
this.state = {
Username: '',
Password: ''
};
}
// ...
}