вызывающая модель в контроллере - PullRequest
1 голос
/ 23 декабря 2019

У меня трудности с вызовом метода. У меня две две кнопки на одной форме. Одна кнопка сохраняет все детали в текстовом файле. Еще одна кнопка проверки даты рождения полей. Кнопка подтверждения не работает. Любая помощь. Ниже приведен код, который я пробовал:

контроллер:

public class SampleController : Controller
{
    //
    // GET: /Sample/

    [HttpPost]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Information information, string buttonType)
    {
        if (buttonType=="Register")
        {
            var byteArray = Encoding.ASCII.GetBytes(information.Surname + Environment.NewLine + information.DOBP + Environment.NewLine + information.Email + Environment.NewLine + information.Gender + Environment.NewLine + information.Tel);
            var stream = new MemoryStream(byteArray);
            return File(stream, "text/plain", "Registration.txt");

        }
        if (buttonType=="Validate")
        {

        }
        return View(information);
    }

    [HttpGet]
    public ActionResult Create()
    {
        return View();
    }  
}

Вот мой класс под названием DOBvalidator:

public class DOBvalidator : ValidationAttribute
{
    public DOBvalidator (int minimumAge)
    {               
         MinimumAge = minimumAge;
         ErrorMessage = "You are under 18";                
    }

    public override bool IsValid(object value)
    {
        DateTime date;
        if ((value!=null && DateTime.TryParse(value.ToString(),out date)))
        {
            return date.AddYears(MinimumAge) < DateTime.Now;
        }              

        return false;
    }

    public override string FormatErrorMessage(string name)
    {
        return string.Format(ErrorMessageString, name, MinimumAge);
    }

    public int MinimumAge { get; set; }
}

Представление:

<p align="center">
     <input type="submit" value="Register" name="buttonType" />                   
     <input type="button" value="Validate" name="buttonType"/>
</p>

Ответы [ 2 ]

1 голос
/ 23 декабря 2019

Мне кажется, это необычный способ сделать что-то. Я бы подумал, что стандартный способ сделать это будет просто иметь кнопку регистрации и сделать это проверить, а затем сохранить, если данные действительны.

Но игнорирование этого - вот что вам нужно сделать. Обе кнопки нужно отправить на сервер. Поэтому, на ваш взгляд, измените код кнопки проверки на

<input type="submit" value="Validate" name="buttonType" />

Затем в методе HttpPost Create в вашем контроллере

измените

 if (buttonType=="Validate")
 {

 }

на

if (buttonType == "Validate")
{
    var validator = new DOBvalidator(18);
    var isValid = validator.IsValid(information.DOBP);
    if(!isValid)
    {
         ModelState.AddModelError("DOBP", validator.ErrorMessage);
    }              
}

Я установил 18, потому что в сообщении об ошибке упоминается 18.

0 голосов
/ 23 декабря 2019

Вы, вероятно, можете попробовать:

<input type="button" value="Validate" name="buttonType" id="btnValidate" runAt="server" onclick="ValidateButton_Click" />

На стороне сервера:

protected void ValidateButton_Click(object sender, EventArgs e) 
{ 
    DOBvalidator.Validate();

    if (DOBvalidator.IsValid)
    {
      // your code here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...