如何创建具有使用动态绑定(asp-for)形式的局部视图?

时间:2019-04-03 15:53:08

标签: c# partial-views razor-pages

我正在尝试使用“联系人”请求表单创建一些登录页面,但是由于该表单使用“ asp-for”绑定到单独的类文件中的类,因此无法将该表单变成部分视图,显然,局部视图cshtml无法识别detail类。

在主页(视图)中实现表单时,它可以完美运行。该页面具有一个模型,该模型具有details类的属性,该属性使用asp-for绑定到表单的字段。 但是,将该表单移至局部视图,则无法识别asp-for的值,因为...它不知道其在模型中的父属性。

我觉得自己做错了。

在我的_ComtactRFormPartial.cshtml部分视图中(删除标签和样式div):

<form method="POST">
     <input asp-for="Contact.Email" type="email" required name="Email" 
     <input asp-for="Contact.Phone" type="tel" required name="Phone" 
     <label asp-for="Contact.Name">שם מלא:</label>
     <input asp-for="Contact.Name" type="text" required name="Name" 
     <input asp-for="Contact.ConPref" type="radio" name="ConPref" 
          id="ConPref" value="whatsapp" />
     <input asp-for="Contact.ConPref" type="radio" name="ConPref" 
          id="ConPref" value="email" checked />
     <input id="Submit1" type="submit" value="שלח" />
  </form>

详细信息类:

public class ConDataFormClass
{
  [Required(ErrorMessage = "אנא כתוב שם מלא"), MinLength(4, 
    ErrorMessage = "קצר מדי. האם הכנסת שם מלא?")]
  public string Name { get; set; }
  [Required(ErrorMessage = "שדה חובה", AllowEmptyStrings = false), 
    EmailAddress]
  public string Email { get; set; }
  [Required(ErrorMessage = "שדה חובה", AllowEmptyStrings = false), 
    Phone]
  public string Phone { get; set; }
  [Required]
  public string ConPref { get; set; }
  public bool bodymail = true;
  public string bodymailCol { get; set; }
  public string bodymailTtl { get; set; }
  public string bodumailMsg { get; set; }
}

该类包括错误和成功消息中使用的其他字段。

现在,在托管视图中help.cshtml:

@page
@model AurlZcom.Pages.helpModel
@{
  ViewData["Title"] = "Help Screen - מסך עזרה";
  Layout = "~/Pages/Shared/_LandingLayout.cshtml";
}
...
@Html.Partial("_ComtactRFormPartial.cshtml")

help.cshtml.cs:

...
public class helpModel : PageModel
{

    [BindProperty]
    public ConDataFormClass Contact { get; set; }
    public EMsendersClass esender;

    public void OnGet()
    {
        Contact = new ConDataFormClass();

    }

    public async Task OnPost()
    {
        esender = new EMsendersClass(
            sending server parameter list
            );
        await esender.Send(Contact,"Help Screen");
    }
}

EMsendersClass是我创建的对我有用的SmtpClient warpper。 Send方法使用EMsendersClass的构造函数参数中的服务器信息,Contact中的详细信息以及常规标题字符串来发送电子邮件。

注意:在希伯来语文字的地方,您可能会看到乱码。该布局包含所有必要的元标记,并且效果很好。

由于我行动不便,因此编写最小代码是一个很大的目标,因此代码重用是“高优先级”。我希望在多个登录页面中使用该联系请求表。我该怎么办?

0 个答案:

没有答案