【问题标题】:Create reusable form contact component in asp.net mvc在 asp.net mvc 中创建可重用的表单联系人组件
【发布时间】:2012-12-13 20:32:43
【问题描述】:

我是 asp.net mvc 的新手,我正在尝试为 asp.net mvc 开发一个可重复使用的联系表单组件。

我尝试用表单创建一个 PartialView,我不知道这是否是更好的方法,用于创建一个可重用的组件

我的部分视图是

@model MyModel.ContactData

@using (Html.BeginForm("ContactForm", "ContactForm", FormMethod.Post)) {
<fieldset>
    <p>
        @Html.LabelFor(model => model.MailAddress)
        @Html.EditorFor(model => model.MailAddress)
    </p>
    <p>
        @Html.LabelFor(model => model.Message)
        @Html.TextAreaFor(model => model.Message)
    </p>
    <input type="submit" value="Save" />
</fieldset>

}

问题从控制器开始,控制器是只有这个partialView的特定控制器。

public class ContactFormController : Controller
{
    [HttpPost]
    public ActionResult ContactForm(ContactData contactData)
    {
        if (ModelState.IsValid)
        {
            return PartialView("MessageSend");
        }

        return PartialView();
    }
}

我的问题是某些必填字段为空的情况下,在这种情况下,控制器仅返回部分视图,而不是在其父上下文中返回部分视图。我尝试将父视图中的 PartialView 调用为 @Html.Partial、@Html.RenderAction、@Html.RenderPartial 并且发生同样的情况。

如何在其父上下文中返回部分视图?我试过了 return View(ParentViewsName, contactData) 但我不喜欢它,因为在提交表单时,它会将地址栏上的 url 从 /Contact 更改为 /ContactForm/ContactForm。

也许我试图用错误的方法创建一个可重用的组件?最好只用 ajax 更新 PartialView?替代品?

谢谢

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    据我了解,您希望在用户成功提交表单后显示状态消息,这是部分视图。我认为 tempdata 将适合这种情况。

    public class ContactFormController : Controller
    {
        [HttpPost]
        public ActionResult ContactForm(ContactData contactData)
        {
            if (ModelState.IsValid)
            {
                TempData["success"] = true;             
                return RedirectToAction("parentpage");
            } 
    
            return View(contactData);
        }
    }
    

    在父页面中,检查 TempData["success"] 是否为空,并显示部分视图“MessageSend”。

    【讨论】:

    • 对不起,我没有解释清楚,问题是如果在未填写所有必填字段时提交表单。使用我当前的代码提交一个需要填写为空的表单时,它只返回没有父视图上下文的部分视图。
    • 你试过我的代码了吗?如果模型无效,则返回页面。如果有效,则设置 tempdata 变量。
    • 是的,我试过了,返回 View(contactData) 它只返回 PartialView,失去父视图。
    • 我认为不可能这样做。相反,您应该进行部分提交。看看这个..stackoverflow.com/questions/4050596/….
    【解决方案2】:

    最后,正如 Sundeep 解释的那样,我已经使用 ajax 完成了此操作,例如这个示例 Partial ASP.NET MVC View submit

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2018-12-16
      • 2023-02-09
      • 2013-01-11
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多