Ответ 1
Переместите форму в частичный вид, который принимает модель EmailSignup
.
У меня есть страница результатов, содержащая форму регистрации. Я пытаюсь использовать проверку на стороне клиента в модели электронной почты, но я не могу, потому что тип модели отличается от типа, который я публикую.
class Results
{
... // some results data to display
}
class EmailSignup
{
public virtual int Id { get; set; }
[Required(ErrorMessage = "Please enter your email.")]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$", ErrorMessage = "Please enter a valid email address.")]
public virtual string Email { get; set; }
}
@model MyApp.Results
[display results]
...
@using (Html.BeginForm("SubmitEmail", "AnalysisResults", FormMethod.Post))
{
<fieldset>
@Html.TextBoxFor( model => model.???? )
</fieldset>
}
Тип, который я хочу отправить пользователю, - это EmailSignup, а не результаты.
Переместите форму в частичный вид, который принимает модель EmailSignup
.
Это можно сделать довольно легко. Вам просто нужно сделать это следующим образом:
var contactModel = new ContactModel();
@Html.TextBoxFor(m => contactModel.Title)
@Html.ValidationMessageFor(m => contactModel.Title)
Валидация работает как прелесть.
Вы можете создать другой HtmlHelper, как этот
var emailSignupHtml = new HtmlHelper<EmailSignup>(Html.ViewContext, new ViewDataContainer<EmailSignup>(new EmailSignup()));
и используйте его так:
@emailSignupHtml.TextBoxFor(m => m.Email)
Для ViewDataContainer я использую следующий вспомогательный класс
public class ViewDataContainer<TModel> : ViewDataDictionary<TModel>, IViewDataContainer
{
public ViewDataContainer(TModel model) : base (model)
{
ViewData = new ViewDataDictionary(model);
}
public ViewDataDictionary ViewData { get; set; }
}
Я думаю, вы также можете попробовать @HTML.Action( "EmaialSignup" ) и ваш контроллер будет иметь функцию, вызывающую частичный вид если вам нужно отобразить несколько ограниченных моделей в этом представлении