//Use for session control
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
});
var app = builder.Build();
// end the Session Control
// Add the Session Control then go to SessionController
app.UseSession();
在会话控制器下 --代码
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Products.Models;
namespace Products.Controllers
{
public class SessionController : Controller
{
private readonly IHttpContextAccessor _contextAccessor;
public SessionController(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
public FieldModel EventHandler(FieldModel model)
{
string sessionName = model.sessionName;
if (model.keystroke == "down")
{
//This is passing in the current value of the field. Just need to save it in the Session
string fieldString = JsonConvert.SerializeObject(model);
_contextAccessor.HttpContext.Session.SetString(sessionName, fieldString);
}
else if (model.keystroke == "up")
{
//TODO - This is passing in the new character. Get the session
FieldModel priorModel = new FieldModel();
string fieldString = _contextAccessor.HttpContext.Session.GetString(sessionName);
priorModel = JsonConvert.DeserializeObject<FieldModel>(fieldString);
bool validate = false;
//TODO - This is passing in the new character. Validate the value for the field
if (model.fieldType == "time")
{
if (model.fieldNewValue.Length < 5)
validate = true;
}
//TODO - If validation passes allow the update
if (validate == true)
{
//fieldString = JsonConvert.SerializeObject(model);
//_contextAccessor.HttpContext.Session.SetString(sessionName, fieldString);
}
//TODO - If validation fails reset the field to the current value
else
{
//fieldString = JsonConvert.SerializeObject(priorModel);
//_contextAccessor.HttpContext.Session.SetString(sessionName, fieldString);
model = priorModel;
}
}
return model;
}
}
}
对于网页视图,我使用了以下代码--code
<script>
function FieldValidatorD() {
let sessionName_ = `time`;
let fieldID_ = `time`;
let fieldType_ = `time`
let keystroke_ = `down`
let input = document.querySelector(`#` + fieldID_).value;
let json = {
sessionName: sessionName_,
fieldID: fieldID_,
fieldType: fieldType_,
fieldCurrentValue: input,
fieldNewValue: input,
keystroke: keystroke_
};
//console.log(json);
$.ajax({
type: `json`,
data: json,
url: `/Session/EventHandler`,
async: false,
success: function (data) {
//console.log(data);
//console.log(data.fieldNewValue);
}
})
};
function FieldValidatorU() {
let sessionName_ = `time`;
let fieldID_ = `time`;
let fieldType_ = `time`
let keystroke_ = `up`
let input = document.querySelector(`#`+fieldID_).value;
let json = {
sessionName: sessionName_,
fieldID: fieldID_,
fieldType: fieldType_,
fieldCurrentValue: input,
fieldNewValue: input,
keystroke: keystroke_
};
//console.log(json);
$.ajax({
type: `json`,
data: json,
url: `/Session/EventHandler`,
async: false,
success: function (data) {
//console.log(data);
//console.log(data.fieldNewValue);
//fill in the textbox by injecting the html into the field
$(`#` + fieldID_).val(data.fieldNewValue);
}
})
};
</script>
2条答案
按热度按时间vnzz0bqm1#
也许你可以使用内置的textmode = time。
它不是100%如你所问,但你的规格有一些“问题”。
比如说我想要10点半还是1点半
所以,10点03分的1和3没有意义,因为我可能想:
所以,打一个1,然后一个3不能真正导致10:03,从那时起,你怎么会进入10:30?
正如我所说的,你可能最好使用默认的文本模式= time。
它会做你问的大部分,不允许用户输入非数字字符,和格式的大部分你想要的。
所以,假设我想在10:30
如果我输入1,0,3,那么这就是我得到的,例如:
标记:
所以,10点半,然后103
当然上面有AM/PM
我们只需要尝试和谷歌,看看是否可以删除上午/下午。
如果你需要超过12小时,那么再一次,上述可能对你没有帮助。
pxq42qpu2#
下面是我发现的用户类型验证。
它仍然显示他们在删除它之前输入的内容,但它是我所能得到的最接近的。
另外,如果有人知道一种方法,从事件中传递参数,而不必在函数中声明它们,这样我就可以在多个字段中重用它,传递不同的变量,那就太好了!
基本上,我设置了一个会话,每个用户基地,将持有该字段的值时,按下一个键在内存中,当释放它将通过验证检查新的值,如果它通过,那么所有的好,否则它重置值与什么是在内存存储。
在program.cs下我添加了
--代码
在会话控制器下
--代码
对于网页视图,我使用了以下代码--code