小编REM*_*ESQ的帖子

MvcMailer:通过模型查看用户输入,然后将其插入邮件

我不知道我是否正确地解释了这一点,或者解决方案是否相当简单,所以这里是:

我正在使用MvcMailer,但在此之前我设置了一个向导输入表单,我称之为Quote.cshtml.在Quote.cshtml后面,我建立了一个名为QuoteModel.cs的模型.

Quote.cshtml最基本的(我省略了所有的向导逻辑,只显示一个输入):

<td width="40%">
    @Html.LabelFor(m => m.FirstName, new { @class = "mylabelstyle", title = "Enter first name." })
</td>
<td width="60%">
    @Html.TextBoxFor(m => m.FirstName)
    @Html.ValidationMessageFor(m => m.FirstName)
</td>
Run Code Online (Sandbox Code Playgroud)

QuoteModel.cs(再次,只显示一个输入; nb:使用DataAnnotationExtensions)

public class QuoteModel
{ 
    [Required(ErrorMessage = "First Name required.")]
    [Display(Name = "First Name:")]
    public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试集成MvcMailer,它设置了IQuoteMailer.cs,QuoteMailer.cs,_Layout.cshtml和QuoteMail.cshtml.QuoteMail.cshtml是邮件的收件人最终会看到的内容.我还设置了一个QuoteController.cs,我在其中放置了MvcMailer所需的相应代码.它位于QuoteMailer.cs和QuoteController.cs中,我在从Quote.cshtml(基于QuoteModel.cs中的模型)传递用户输入时遇到问题.

IQuoteMailer.cs:

 public interface IQuoteMailer
    {               
         MailMessage QuoteMail();
    }
Run Code Online (Sandbox Code Playgroud)

QuoteMailer.cs:

public class QuoteMailer : MailerBase, IQuoteMailer     
{
    public QuoteMailer():
        base()
    {
        MasterName="_Layout";
    }


    public virtual MailMessage …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model view mvcmailer

8
推荐指数
1
解决办法
3595
查看次数

尝试使用Visual Studio Online与Orchard 1.8源代码

我是一个使用这些源控制方法的n00b.我刚刚注册了简单的VS在线.以前,当我使用Orchard的来源时,我把它放在我的OneDrive中,以便在办公室和家中工作.它工作得很好.

但现在我想尝试VS在线.我想因为Orchard的源文件夹是如何设置的,我不能从顶级Orchard"添加源代码控制解决方案"(即打开〜/ src文件夹下包含的Orchard.sln).从我在研究中收集的内容中你必须手动添加内容,但我甚至无法做到这一点.

我在VS在线创建了一个项目,并尝试"映射"它,但是没有成功(它只是添加了一些构建过程模板).

任何人都知道在线添加干净的Orchard 1.8源的步骤.先感谢您.

编辑:添加100赏金 我在这里真的没有选择,所以希望100的赏金能给我一个详细的答案,并给出正确的步骤来完成这个.

我最初使用的是OneDrive(7GB免费版),但是对于Orchard源我的空间不足(我还有其他工作,Orchard的空间不到1/2).我也有OnDrive for Business(我认为是20GB),这应该已经足够了,但是他们将文件数量限制在20,000,而在我的源代码中使用第三方模块/主题我运行的时候接近这个数字而且文件不会因为这个限制同步.

在我看来,免费的VS Online将是最好的选择,然后让我在家庭和工作之间推/拉变化.

任何帮助都非常感谢,我希望我的小额赠金足以引出一些好的答案.

谢谢!

orchardcms visual-studio-2013 azure-devops

8
推荐指数
1
解决办法
525
查看次数

如何检查 URL 路径以应用条件(Razor)

我正在使用这样的代码来检测浏览器并应用条件来显示或不显示<label>

@{
var settings = Model.PartFieldDefinition.Settings.GetModel();
System.Web.HttpBrowserCapabilitiesBase theBrow = Request.Browser;
}
<fieldset>
@{
   if ((theBrow.Browser == "IE") && (theBrow.MajorVersion < 10)) 
   {
       @:<label>@Model.DisplayName</label>
       @://Some Code for inputs
   }
   else 
   {
        @://Some Code for inputs
   }
}
</fieldset>
Run Code Online (Sandbox Code Playgroud)

我一直试图弄清楚我是否可以(如果可以,如何)我可以利用这个逻辑来检测用户在网站中显示或不显示的路径 <label>

例如,在我希望显示标签的任何其他路径上。但是,对于 ~/Services (路径)下的页面,我希望能够隐藏标签。

它比那更复杂一点。该代码位于一个编辑器模板中,该模板在整个站点中使用。如果我在编辑器模板中使用 CSS 来“隐藏”标签,我将影响所有页面。我希望通过上述逻辑我可以避免这种情况,并且只在路径下的某些页面上应用我的逻辑。

谢谢。

更新 我尝试了以下方法:

@{
    string CurrentURL = Request.ApplicationPath;
}
<fieldset>
@{
    if ((CurrentURL == "Services")) // also tried "/Services"
    // rest of code left out for brevity
}
Run Code Online (Sandbox Code Playgroud)

但是标签隐藏在所有页面上,甚至在路径“~/Services”之外。我坚持语法。

找到答案

我做了以下事情:

@{
    string …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3 asp.net-mvc-4

5
推荐指数
0
解决办法
1万
查看次数

工作流程 - 可以使用决策活动有条件地显示形状吗?

我有条不紊地使用javascript在动态表单中的网格中显示其他表单域.因此,如果我有一个带有是/否选择的单选按钮,"是"将显示<div id="whatever">带有其他问题的网格(使用),并且"否"将不显示网格.

现在,当通过工作流发送电子邮件时,我想确定是否显示任何响应,具体取决于动态表单中的是/否选择.这样,如果选择"否",那么这些附加问题就没有答案,因此电子邮件不会显示它们; 而如果选择"是",那么这些问题将与用户输入的响应一起显示在电子邮件活动中.

但我很难知道如何实现这一目标.

我开始讨论使用Decision Activity,特别是Workflow.SetState();通过设置{Shape.Execute:Shape1}变量,但它只传递文字字符串而不是执行形状.

这是我的决策活动代码:

var choice = "#{FormSubmission.Field:RadioChoice}";
var choiceDisplay = "";

if (choice == "Yes") choiceDisplay = "{Shape.Execute:Shape1}";
else if (choice == "No") choiceDisplay = "{Shape.Execute:Shape2}";

Workflow.SetState("InsertShape", choiceDisplay);
SetOutcome("Done");
Run Code Online (Sandbox Code Playgroud)

这就是我在电子邮件活动中使用它的方式:

{Workflow.State:SetState}

我不确定这是否会奏效.任何指导表示赞赏.

如果情况不起作用,我该怎么做呢?

orchardcms

5
推荐指数
0
解决办法
152
查看次数

如何在web.config中设置不同的stmpclient实例?

我不相信这是一个专门的MvcMailer问题(这是我正在使用的邮件),但我正在努力构建Googleplex搜索,以找出如何根据我的上下文从不同帐户发送电子邮件.

我需要从两个不同的电子邮件帐户发送两封电子邮件.我试过用

mailMessage.From = new MailAddress("some-other-email@gmail.com");
Run Code Online (Sandbox Code Playgroud)

在MvcMailer中,但这甚至没有显示在我转储到临时目录的电子邮件中.它显示为web.config中的内容:"some-email@gmail.com".

这是我对MvcMailer的web.config:

<mailSettings>
      <!-- Method#1: Configure smtp server credentials -->
      <!--<smtp from="some-email@gmail.com">
        <network enableSsl="true" host="smtp.gmail.com" port="587" userName="some-email@gmail.com" password="valid-password" />
      </smtp>-->
      <!-- Method#2: Dump emails to a local directory -->

            <smtp from="some-email@gmail.com" deliveryMethod="SpecifiedPickupDirectory">
                <network host="localhost" />
                <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\" />
            </smtp>

    </mailSettings>
Run Code Online (Sandbox Code Playgroud)

这是邮件代码:

public virtual MailMessage EMailConsultation(EMailConsultationData model)
        {
            var mailMessage = new MailMessage { Subject = "INQUIRY: E-Mail Consultation" };

            mailMessage.From = new MailAddress("some-other-email@gmail.com");//I tested this to see if at the very least it would …
Run Code Online (Sandbox Code Playgroud)

smtpclient mvcmailer asp.net-mvc-3

4
推荐指数
1
解决办法
2226
查看次数

在@ViewBag 中将十进制格式设置为货币

在我看来,我这样称呼小数:

@ViewBag.CalculatePrice
Run Code Online (Sandbox Code Playgroud)

我怎样才能格式化它来表示 $xxx.xx?

CalculatePrice 只是public decimal CalculatePrice() { //performing calculation }一个类。

谢谢。

razor asp.net-mvc-3

3
推荐指数
1
解决办法
6620
查看次数

尝试使用@ Html.CheckBox来显示枚举文本

我开始这样做是为了在我的视图中显示一些复选框:

@Html.LabelFor(m => m.MyEnum, T("Pick Your Poison"))
<div>                
    @for(int i = 0; i < Model.Alcohol.Count; i++)
    {
        <label>
            @T(Model.Alcohol[i].Text)
            @Html.CheckBoxFor(m => Model.Alcohol[i].Selected)
            @Html.HiddenFor(m => Model.Alcohol[i].Value)
        </label>
    }
</div>
Run Code Online (Sandbox Code Playgroud)

请注意:这里重要的是@T方法,用于处理文本到其他语言的翻译.

这有效.我有一个简单的enum,后端的一些方法将它变成视图中的文本.所以,enum如:

public enum MyEnum
{
    Beer = 1,
    Vodka = 2,
    Rum = 3
}
Run Code Online (Sandbox Code Playgroud)

将显示包含这3个选项的复选框列表.在我的ViewModel中,我这样做:

Alcohol= Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(x =>
{
    return new SelectListItem { 
        Text = x.ToString().ToUpper(), Value = ((int)x).ToString()
        };
    }).ToList();
}
Run Code Online (Sandbox Code Playgroud)

但是,我想在复选框旁边添加更多描述性文本.我宁愿enum有这个或类似的系统类型(我将解释下划线):

public enum MyEnum
{
    I_like_Beer = 1,
    I_hate_Vodka = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc enums asp.net-mvc-3 asp.net-mvc-4

3
推荐指数
1
解决办法
521
查看次数

扩展方法无法动态调度错误 - 我该如何解决?

无法找到解决此问题的正确方法.

我正在使用[Serializable](MVC3期货)以获得具有单独视图的"向导".这是我的控制器中要序列化的代码:

 private MyViewModel myData;
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var serialized = Request.Form["myData"];
            if (serialized != null) //Form was posted containing serialized data
            {
                myData = (MyViewModel)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
                TryUpdateModel(myData);
            }
            else
                myData = (MyViewModel)TempData["myData"] ?? new MyViewModel();
            TempData.Keep();
        }
        protected override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.Result is RedirectToRouteResult)
                TempData["myData"] = myData;
        }
Run Code Online (Sandbox Code Playgroud)

沿着我的控制器还我这样做(只是一个片段 - 代码经过与向前和后退按钮Strings向导):

public ActionResult Confirm(string backButton, string nextButton)
        {
            if (backButton != null)
                return RedirectToAction("Details");

            else if ((nextButton != null) && …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3 asp.net-mvc-4

2
推荐指数
1
解决办法
7296
查看次数

想要使用 NHibernate 将选定的(即超过 1 个)枚举保存为字符串

我一生都无法将它与我现有的代码一起使用,但我正在尝试将我的enum选择保存为 NHibernate 中的字符串。基本上,我有一个 UI 复选框,如果用户选择多个复选框,我想存储这些选择。现在,我可以让 NHibernate 存储一个选择(例如,从下拉列表或单选按钮列表中,用户仅限于一个选择)。

这是我对枚举的jist:

public enum IncomeType
{
    [Display(Name = "Full-Time Employment")]
    FullTime,
    [Display(Name = "Part-Time Employment")]
    PartTime,
    [Display(Name = "Self-Employment")]
    SelfEmployed,
    [Display(Name = "Rental")]
    Rental,
    [Display(Name = "Social Security Payments")]
    SocialSecurity,
    [Display(Name = "Retirement / Pension Payments")]
    Retirement,
    [Display(Name = "Child Support Payments")]
    ChildSupport,
    [Display(Name = "Spousal Maintenance")]
    Maintenance,
    [Display(Name = "Other")]
    Other
}
Run Code Online (Sandbox Code Playgroud)

我使用一种方法来“选择”是否显示复选框列表(如果我BulkItemThreshold的选项数量等于选项数,则显示一个复选框列表)。这是那个方法:

public static IEnumerable<SelectListItem> GetItemsFromEnumString<T>
    (T selectedValue = default(T)) where T : struct
{
    return from name …
Run Code Online (Sandbox Code Playgroud)

nhibernate asp.net-mvc orchardcms

2
推荐指数
1
解决办法
1502
查看次数

如何在C#字符串属性中插入HTML标记?

不确定如果可能,但我在课堂上有这个:

public string TextNotIncluded 
{ 
    get
    { 
        return ("which is <u>not</u> included in the Quote");
    }
}
Run Code Online (Sandbox Code Playgroud)

<u></u>被显示在我看来,而非字不被强调.我不熟悉C#.

任何人都可以提供快速解答吗?

谢谢.

编辑:

我只是在我的观点中这样说:@MyClass.TextNotIncluded.@Html.Raw在我的情况下,将它包装起来并不高效,因为我在整个数十个视图中都散布了它.

c# asp.net-mvc-3

2
推荐指数
2
解决办法
1万
查看次数

将枚举存储为逗号分隔的列表

我正在尝试将一个另存enum为逗号分隔的列表保存在数据库中。

我知道我可以做这样的事情来实际存储逗号分隔的列表:

part.MyProperty = new[] {"foo", "bar"};
Run Code Online (Sandbox Code Playgroud)

并且数据库将有一个条目“ foo,bar”。

我不知道该怎么做是如何存储enum,例如:

public enum Choices { Choice1, Choice2, Choice3 }
Run Code Online (Sandbox Code Playgroud)

我收集到我必须使用ParseToString使用enum值的信息,但是我不确定该怎么做。

这似乎不正确:

part.MyProperty = new[] return from name in Enum.GetNames(typeof(T))
   let enumValue = Convert.ToString((T)Enum.Parse(typeof(T), name, true))
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

asp.net-mvc c#-4.0

2
推荐指数
1
解决办法
4006
查看次数

如果使用多个动作,使用TempData.Keep()是否会保存所有先前的TempData?

我昨天问了这个问题.

我相信我已经找到了使用TempData的答案.我的新问题是,是否通过动作(如向导步骤)沿着TempData进行串行将"保留"所有先前的TempData,或者如果我必须在每个动作中继续重新声明以"保持"它.

因此,如果TempData Step1具有字段1,2和3,然后Step2具有字段4,5和6,那么将在步骤3中保留1到6:

[HttpPost]
public ActionResult Step1 (Step1Model model)
{
    if (ModelState.IsValid)
    {
        TempData["Step1"] = model;
        return RedirectToAction("Step2")
    }
    return View(model);
}

public ActionResult Step2 (Step2Model model)
{
    Step1Model step1 = (Step1Model)TempData["Step1"]
    if (step1 == null)
    {
        return RedirectToAction("Step1")
    }
    TempData.Keep("Step1")
    if (ModelState.IsValid)
    {
        TempData["Step2"] = model;
        return RedirectToAction("Step3")
    }
    return View(model);
}
public ActionResult Step3()
{
    TempData.Keep() // is this keeping Step1 and Step2?
    return View();
}
Run Code Online (Sandbox Code Playgroud)

以上内容过于简单.最终,我可能有6个或7个步骤,想知道是否有第三步:当我在第二步(即没有重新声明使用第一步和第二步的:在一个新的第三步,我会写Step1Model step1...;Step2Model step2...;

asp.net-mvc-3 asp.net-mvc-4

2
推荐指数
1
解决办法
4052
查看次数

Razor Pages:对所有返回类型以及何时使用它们感到困惑

我通常对在 Razor Pages 中使用某些 C# 返回类型的“为什么”(而不是“如何”)感到困惑。在某些情况下,我理解“为什么”,但不清楚何时应该使用一个而不是另一个。我最初的困惑始于异步类型,但现在我明白了。这也加剧了void类型,我对它有了更好的理解,但仍然没有完全理解。

我正在研究几个不同的代码片段以更好地掌握,并且可以使用一些有用的解释 - 文档和其他来源并没有真正为我带回家。

有些方法来自某些 DI,不一定相关(我认为,就我所知,这是使用一种返回类型而不是另一种返回类型的原因,在这种情况下,我感谢解释)。这里有一些不同的片段,我希望社区可以帮助我更好地理解“为什么”使用一种返回类型而不是另一种返回类型(或者我是否应该坚持使用一种类型,因为它不会影响结果正在做什么)。

第一的:

public void OnGet()
{
    ServicesContainer = _helper
        .GetRecentContentItemsByContentTypeAsync("Services")
        .GetAwaiter()
        .GetResult()
        .SingleOrDefault();
    ServicesList = _helper
        .GetRecentContentItemsByContentTypeAsync("Service")
        .GetAwaiter()
        .GetResult()
        .OrderByDescending(c => c.CreatedUtc)
        .Take(3);
}
Run Code Online (Sandbox Code Playgroud)

代码本身我理解没有问题 - 它正在检索容器和其中的列表项。我的 Razor 页面只是使用重复foreach循环显示列表项。我也了解代码正在获取此信息,这是最基本的示例。所以在我的理解中没有问题。

第二:

public async Task OnGetAsync(string projectTitle)
{
    Project = _helper
        .QueryContentItemsAsync(q => q
            .Where(c => c.DisplayText == projectTitle))
        .GetAwaiter()
        .GetResult()
        .SingleOrDefault();

    var relatedProjects = 
        (IEnumerable<string>)Project?
            .Content
            .Project.RelatedProjects?
            .ContentItemIds?.ToObject<string[]>();

    if (relatedProjects?.Count() > 0)
    {
        RelatedProjects = await
            _helper.GetContentItemsByIdAsync(relatedProjects); …
Run Code Online (Sandbox Code Playgroud)

c# razor razor-pages

1
推荐指数
2
解决办法
580
查看次数