asp.net mvc:允许输入字段使用多种输入格式

发布于 2024-10-19 13:08:53 字数 866 浏览 2 评论 0原文

我想允许输入字段有多种输入格式。就我而言,它是一个经度字段。在数据库中,我将其设置为十进制(18,10)。它期望收到一个逗号分隔值,例如 16,2345678,但 Google 地图或某些用户正在使用点,例如 16.2345678 我不想返回错误,只是很高兴将其转换为预期的数据库格式。

我尝试在我的元数据验证类(使用实体框架)中执行此操作,

public partial class Job

    /*[Bind(Exclude = "ID")]*/
    public class JobMetaData
    {
        public object Longitude
        {
            get { return this.Longitude; }
            set { this.Longitude = value; /* Seems that this point isnt reached*/ }
        }

但不幸的是,未调用设置器,并且 ViewState.isValid 仅返回 false。

[HttpPost]
    public ActionResult Edit(Job model)
    {

        // parse the long-lat if needed here??

        try
        {
            if (!ModelState.IsValid)
            {

我应该在哪里尝试解析该值以允许两个值(逗号分隔和点分隔)转换它们并保护它。

我对另一个字段有同样的问题:我希望用户输入 4 或 4€,以防删除 € 符号并将其作为数字保存到数据库中。

感谢您的帮助。

I want to allow multiple input-formats for a input field. In my case it is a Longitude field. In the DB I set it to decimal(18,10). It expects to recieve a comma-separated-value e.g. 16,2345678 but Google Maps or some Users are using a dot e.g. 16.2345678
I dont want to return an error but simply be glad and transform it to the expected db-format.

I tried to do it in my MetaData Validation Class (using Entity Framework)

public partial class Job

    /*[Bind(Exclude = "ID")]*/
    public class JobMetaData
    {
        public object Longitude
        {
            get { return this.Longitude; }
            set { this.Longitude = value; /* Seems that this point isnt reached*/ }
        }

but unfortunatly the setter is not called and the ViewState.isValid returns simply false.

[HttpPost]
    public ActionResult Edit(Job model)
    {

        // parse the long-lat if needed here??

        try
        {
            if (!ModelState.IsValid)
            {

Where should I try to parse the value to allow both values (comma-separated and dot-separated) transform them and safe it.

I have the same issue for another field: I would like the user to enter 4 or 4€, in case just delete the €-sign and save it as a number to db.

Thanks for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

被你宠の有点坏 2024-10-26 13:08:53

如果您在其他领域遇到同样的问题。
作为最佳实践 -
1] 使用 ViewModel“JobViewModel”

2] 这样,如果需要,您可以为其他属性创建自定义验证属性

3] 在编辑帖子中接受 ViewModel。
[http邮报]
公共 ActionResult 编辑(作业模型)
{

    // parse the long-lat if needed here??

    try
    {
        if (!ModelState.IsValid)
        {

4] 如果 Modellstate isValid 则执行所需的解析,然后将其保存到数据库。

编辑

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(JobViewModel jobviewModel)
    {
    try
        {
                if (!ModelState.IsValid)
        {
            jobviewModel.Longitude.replace(".",",")
            -- save DB logic here

        }

    }

    }

public class JobViewModel 
{
    public string Longitude{ get; set; }
}


For GET methods need to use use Automapper. or 

    jobviewModel.Longitude = model.Longitude

If you have same issue for another field.
as a best practise -
1] use ViewModel "JobViewModel"

2] so that If required you can create Custom validation attributes for your other properties

3] In Edit Post accept ViewModel.
[HttpPost]
public ActionResult Edit(Job model)
{

    // parse the long-lat if needed here??

    try
    {
        if (!ModelState.IsValid)
        {

4] and if Modellstate isValid perform required parsing and then save it to database.

EDIT

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(JobViewModel jobviewModel)
    {
    try
        {
                if (!ModelState.IsValid)
        {
            jobviewModel.Longitude.replace(".",",")
            -- save DB logic here

        }

    }

    }

public class JobViewModel 
{
    public string Longitude{ get; set; }
}


For GET methods need to use use Automapper. or 

    jobviewModel.Longitude = model.Longitude
无所谓啦 2024-10-26 13:08:53

使用字符串类型并用它做任何你想做的事情。

public partial class Job
{
    public class JobMetaData
    {
        public string Longitude { get; set; }
    }
}

Use the string type and do whatever you want with it.

public partial class Job
{
    public class JobMetaData
    {
        public string Longitude { get; set; }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文